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


PHP regular expression to match lines starting with a special character

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

因此,示例文件:

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);

由于默认情况下量词是贪婪的,而默认情况下句点与换行符不匹配,因此您将获得所需内容。