preg_match没有恰当地找到行尾

时间:2013-04-22 22:14:35

标签: php regex preg-match

我正在解析来自控制台的文件中的信息,每行末尾都是日期,但该行也可能已经列出了日期。输入行如下所示:

 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.

我错过了什么?

1 个答案:

答案 0 :(得分: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];
}