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

16

我有一个文本文件,其中包含一些配置值。有些注释以#开头,我正在尝试找到一个正则表达式模式,以查找所有以#开头的行。

因此,示例文件:

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个回答

24

你忘记了多行匹配模式(而且不应该使用单行匹配模式;大小写不敏感的修饰符也是不必要的,懒惰匹配修饰符也是):

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

说明:

  • /m 允许 ^$ 匹配行的开头/结尾,而不仅仅是整个字符串(这里需要)
  • /s 允许点匹配换行符(这里不需要)
  • /i 打开大小写不敏感匹配(这里不需要)
  • /U 打开非贪婪匹配(由于 anchors 的存在这里没有区别)

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

由于量词默认为贪婪模式,而点号默认不匹配换行符,因此您将获得所需的内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接