一尘不染

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

php

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

因此,示例文件:

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

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


阅读 549

收藏
2020-05-29

共1个答案

一尘不染

你忘了多修饰符(你应该 使用单线改性剂;也是不区分大小写的修饰符是不必要的,因为还有ungreedy修改):

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

说明:

  • /m允许^and $在行的开头/结尾进行匹配,而不仅仅是整个字符串(您在此处需要)
  • /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
2020-05-29