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

2022-08-31 00:53:07

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

所以,示例文件:

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

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


答案 1

您忘记了多行修饰符(并且不应使用单行修饰符;不区分大小写的修饰符以及不修饰符也是不必要的):

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

答案 2

你可以简单地写:

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

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


推荐