PHP正则表达式不起作用

时间:2013-05-17 20:46:21

标签: php regex preg-match

我希望在以下示例中匹配“TEST:”:

$text = "TEST:

This is a test.";

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

但是$ match是空的。

然而这确实有效:

$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:”匹配。

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

实际上当你用$来表示该行的结尾时,要非常小心地从构建字符串的位置: 在Windows上,行尾是\ r \ n,而在unix上它只是\ n $ end分隔符仅将\ n识别为行尾

$text = "TEST:

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

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

将完美运作