我有一个带有一些配置值的文本文件。评论以#我正试图找到一个正则表达式模式,它将找出所有以#开头的行
因此,示例文件:
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);
但它总是输出空数组。有人能帮忙吗?
您忘记了多行修饰符(您应该不要使用单行修饰符;而且不区分大小写的修饰符和不区分大小键的修饰符是不必要的):
preg_match_all("/^#(.*)$/m",$text,$m);
解释:
/m
允许^
和$
在行的开始/结束处匹配,而不仅仅是整个字符串(此处需要)/s
允许点与换行符匹配(此处不需要)/i
打开不区分大小写的匹配(此处不需要)/U
打开不规则匹配(由于锚的原因,这在这里没有什么区别)
PHP代码演示:
$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
您可以简单地编写:
preg_match_all('~^#.*~m', $text, $m);
由于默认情况下量词是贪婪的,而默认情况下句点与换行符不匹配,因此您将获得所需内容。