正则表达式 - 为什么不.*(点星)匹配换行符?

dar*_*ryl 6 php regex preg-match

/(<pre>|<code>|\[code])(.*)(</pre>|</code>|\[/code])/gi

如果我有以下内容:

<code>foobar</code>

但如果我有这样的换行符:

<code>
    Awesome
</code>
Run Code Online (Sandbox Code Playgroud)

它不符合它,我做错了什么?

mar*_*rio 15

您确实需要DOTALL修改器/s,因为.默认情况下的点不包括换行符.该/g修改OTOH是不是在PHP和PCRE法律.

你也应该使用.*?不太匹配.


bre*_*ell 6

在PCRE中,"." 不匹配每个字符,它匹配所有不是换行符的东西:

在字符类之外,模式中的点与主题中的任何一个字符匹配,包括非打印字符,但不是(默认情况下)换行符.

(http://www.php.net/manual/en/regexp.reference.dot.php)

尝试使用[\ s\S]之类的东西.

  • 或者,你知道,你可以听我写作时弹出的其他三个有效答案中的任何一个. (3认同)