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

Enn*_*enn 14 php regex

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

所以,示例文件:

1st line
#test line this 
line #new line
aaaa #aaaa
bbbbbbbbbbb#
cccccccccccc
#ddddddddd
Run Code Online (Sandbox Code Playgroud)

我想找到

#test line this 
#ddddddddd
Run Code Online (Sandbox Code Playgroud)

因为只有这两行以#开头我试过以下代码:

preg_match_all("/^#(.*)$/siU",$text,$m);
var_dump($m);
Run Code Online (Sandbox Code Playgroud)

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

Tim*_*ker 17

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

preg_match_all("/^#(.*)$/m",$text,$m);
Run Code Online (Sandbox Code Playgroud)

说明:

  • /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]);
Run Code Online (Sandbox Code Playgroud)

结果:

[0] => #test line this 
[1] => #ddddddddd
Run Code Online (Sandbox Code Playgroud)