我有一个字符串,包含正常字符,白色字符集和之间的换行符.这个正则表达式不起作用:/<div>(.*)<\/div>
.这是因为.*
与换行符不匹配.我的问题是,怎么做?
Mar*_*ers 39
您需要使用DOTALL修改器.
'/<div>(.*)<\/div>/s'
Run Code Online (Sandbox Code Playgroud)
这可能不会给你你想要的东西,因为你是贪婪的匹配.您可能会尝试非贪婪的匹配:
'/<div>(.*?)<\/div>/s'
Run Code Online (Sandbox Code Playgroud)
如果没有其他标签,您还可以通过匹配除"<"之外的所有内容来解决此问题:
'/<div>([^<]*)<\/div>/'
Run Code Online (Sandbox Code Playgroud)
另一个观察是您不需要使用/
正则表达式分隔符.使用其它字符意味着你没有逃脱/
的</div>
,提高了可读性.这适用于所有上述正则表达式.如果您使用'#'而不是'/',它会显示:
'#<div>([^<]*)</div>#'
Run Code Online (Sandbox Code Playgroud)
但是,由于嵌套的div,额外的空格,HTML注释和各种其他内容,所有这些解决方案都可能失败.HTML太复杂,无法使用Regex进行解析,因此您应该考虑使用HTML解析器.
小智 12
要匹配所有字符,你可以使用这个技巧:
%\<div\>([\s\S]*)\</div\>%
Run Code Online (Sandbox Code Playgroud)
aca*_*lon 10
我知道这是一个旧的,但我最近偶然发现了它.您也可以使用(?s)
模式修改器.例如
(?s)/<div>(.*?)<\/div>
Run Code Online (Sandbox Code Playgroud)
只要这样做就不会有任何问题:
(.|\n)
Run Code Online (Sandbox Code Playgroud)
这匹配除换行符之外的任何字符或换行符,因此每个字符。至少它为我解决了这个问题。