如何使用正则expression式来匹配换行符
我有一个string包含正常字符,白色字符和之间的换行符。 这个正则expression式不起作用: /<div>(.*)<\/div>
。 这是因为.*
与换行符不匹配。 我的问题是,如何做到这一点?
您需要使用DOTALL修饰符。
'/<div>(.*)<\/div>/s'
这可能不会给你什么你想要的,因为你是贪婪的匹配。 你可以尝试一个非贪婪的匹配:
'/<div>(.*?)<\/div>/s'
如果没有其他标签,您也可以通过匹配除“<”之外的所有内容来解决此问题:
'/<div>([^<]*)<\/div>/'
另一个观察是,你不需要使用/
作为你的正则expression式分隔符。 使用另一个字符意味着您不必转义/
in </div>
,提高可读性。 这适用于所有上述正则expression式。 如果你使用'#'而不是'/',看起来如下:
'#<div>([^<]*)</div>#'
但是,所有这些解决scheme可能会由于嵌套的div,额外的空白,HTML注释和其他各种事情而失败。 HTML太复杂了,不能用正则expression式parsing,所以你应该考虑使用HTMLparsing器。
匹配所有的字符,你可以使用这个技巧:
%\<div\>([\s\S]*)\</div\>%
我知道这是一个古老的,但最近我偶然发现。 您也可以使用(?s)
模式修饰符 。 例如
(?s)/<div>(.*?)<\/div>
在正则expression式编译器中通常会有一个标志,告诉它该点应该匹配换行符。