PHP正则表达式匹配以特殊字符开头的行

时间:2013-08-03 16:43:15

标签: php regex

我有一个带有一些配置值的文本文件。评论以#开头 我试图找到一个正则表达式模式,找出所有以#

开头的行

所以,样本文件:

1st line
#test line this 
line #new line
aaaa #aaaa
bbbbbbbbbbb#
cccccccccccc
#ddddddddd

我想找到

#test line this 
#ddddddddd

因为只有这两行以#开头 我尝试了以下代码:

preg_match_all("/^#(.*)$/siU",$text,$m);
var_dump($m);

但它总是输出空数组。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:17)

您忘记了多线修改器(您应该使用单线修改器;也不需要不区分大小写的修改器以及u​​ngreedy修改器):

preg_match_all("/^#(.*)$/m",$text,$m);

<强>说明:

  • /m允许^$在行的开头/结尾匹配,而不仅仅是整个字符串(此处需要)
  • /s允许点匹配换行符(这里不需要)
  • /i打开不区分大小写的匹配(这里不需要)
  • /U启用了不匹配的匹配(由于anchors而在此处没有任何区别)

A PHP code demo

$text = "1st line\n#test line this \nline #new line\naaaa #aaaa\nbbbbbbbbbbb#\ncccccccccccc\n#ddddddddd"; 
preg_match_all("/^#(.*)$/m",$text,$m);
print_r($m[0]);

结果:

[0] => #test line this 
[1] => #ddddddddd

答案 1 :(得分:2)

您可以简单地写一下:

preg_match_all('~^#.*~m', $text, $m);

因为默认情况下量词是贪婪的,并且默认情况下点与新行不匹配,所以你将得到你想要的。