我希望在以下示例中匹配“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:”匹配。
我在这里做错了什么?它似乎与模式中的冒号有问题,但如果我不逃避它也不起作用。
感谢您的帮助!
答案 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);
将完美运作