2013-05-17 155 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