/(<pre>|<code>|\[code])(.*)(</pre>|</code>|\[/code])/gi
如果我有以下内容,则可以使用:
<code>foobar</code>
但如果我有这样的换行符:
<code>
Awesome
</code>
它不符合它,我做错了什么?
答案 0 :(得分:15)
您确实需要DOTALL
modifer /s
,因为默认情况下.
点不包括换行符。
/g
修饰符OTOH在PHP和PCRE中不合法。
您还应该使用.*?
来匹配太宽。
答案 1 :(得分:6)
在PCRE中,“。”不匹配每个字符,它匹配所有不是换行符的东西:
在字符类之外,模式中的点与主题中的任何一个字符匹配, 包括非打印字符,但不包括(默认情况下)换行符。
(http://www.php.net/manual/en/regexp.reference.dot.php)
尝试使用类似[\ s \ S]的内容。
答案 2 :(得分:3)
默认情况下,.
匹配除换行符之外的每个字符,除非您输入s
开关。
请参阅正则表达式开关的解释here。
特别是
s(PCRE_DOTALL)如果设置了此修饰符,则中的点元字符 模式匹配所有字符,包括换行符。没有它, 新线被排除在外。
所以/(<pre>|<code>|\[code])(.*)(</pre>|</code>|\[/code])/is
。
(否g
,请使用preg_match_all
)。