0

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

$text = "TEST:

This is a test.";

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

但是 $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:”。

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

感谢帮助!

4

1 回答 1

2

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

$text = "TEST:

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

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

将完美地工作

于 2013-05-17T21:02:56.633 回答