我有一个带有一些配置值的文本文件。评论以#开头 我试图找到一个正则表达式模式,找出所有以#
开头的行所以,样本文件:
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);
但它总是输出空数组。有人可以帮忙吗?
答案 0 :(得分:17)
您忘记了多线修改器(您应该不使用单线修改器;也不需要不区分大小写的修改器以及ungreedy修改器):
preg_match_all("/^#(.*)$/m",$text,$m);
<强>说明:强>
/m
允许^
和$
在行的开头/结尾匹配,而不仅仅是整个字符串(此处需要)/s
允许点匹配换行符(这里不需要)/i
打开不区分大小写的匹配(这里不需要)/U
启用了不匹配的匹配(由于anchors而在此处没有任何区别)$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);
因为默认情况下量词是贪婪的,并且默认情况下点与新行不匹配,所以你将得到你想要的。