2

コンソールからのファイルの情報を解析しています。各行の最後に日付がありますが、その行には既に日付がリストされている場合もあります。入力行は次のようになります。

 00029 --> Ticket Received in QUEUE11 by ABCDE on 04/11/2013 at 11:   4/11/2013 
 00030 07:12.                                                         4/11/2013 

(各行番号の前と行末にはスペースがあります)。

ループ内の正規表現はforeach次のようになります。

if (preg_match("/\s\d{5}\s(.+?)\d{1,2}\/\d{1,2}\/\d{1,4}\s\n/", $line, $match))
{
    $note = $match[1];
}

正規表現はThe Regex Coachで機能していますが、コードで機能しない理由が見つかりません。\n があると、どの行とも一致しません。それがなければ、最初のデートの前に断ち切られます。

\r も試してみましたが、何もないのと同じように動作します。ループ内で $note をエコーし​​た後、最終的な出力が次のようになるのを探しています。

Ticket Received in QUEUE11 by ABCDE on 04/11/2013 at 11:
07:12.

私は何が欠けていますか?

4

1 に答える 1

1

末尾のスペースをオプションにします。

if (preg_match("/\s\d{5}\s(.+?)\d{1,2}\/\d{1,2}\/\d{1,4}\s*\n/", $line, $match))
//                                                here ___^
{
    $note = $match[1];
}   
于 2013-04-23T08:03:38.567 に答える