2013-05-17 104 views
0

我想匹配 “TEST”:PHP的正则表达式不工作

$text = "TEST: 

This is a test."; 

preg_match_all("/^([A-Z]+)\:$/m", $text, $matches); 

但是$匹配的是空的。

然而,这并不工作:

$text = "TEST: 

This is a test."; 

preg_match_all("/^([A-Z]+).*\:*$/m", $text, $matches); 

输出:

Array 
(
    [0] => Array 
     (
      [0] => TEST: 
      [1] => This is a test. 
     ) 

    [1] => Array 
     (
      [0] => TEST 
      [1] => T 
     ) 

) 

但我只希望它匹配 “TEST”。

我在这里做错了什么?它似乎在模式中的冒号有问题,但如果我不逃避它,也不起作用。

感谢您的帮助!

回答

2

实际上,当您使用$来表示行的末尾时,非常小心从字符串的构建位置开始: 在窗口上,行结束符是\ r \ n,而在unix上时,它仅为\ n 的$结束符ONLY \ n识别为行

的一端
$text = "TEST: 

This is a test."; 
$text = str_replace("\r", "", $text); 

preg_match_all("/^([A-Z]+)\:$/m", $text, $matches); 

将很好地工作

+0

感谢,似乎竟是罪魁祸首!现在正常工作:) – Daniel