我有一个在
这个正则表达式不起作用:/<div>(.*)<\/div>
.这是因为.*
不匹配换行符。我该怎么做?
最佳答案
您需要使用 DOTALL修饰符( /s
)。
'/<div>(.*)<\/div>/s'
这可能不会给你你想要的,因为你是贪婪的匹配。您可以改为尝试非贪婪匹配:
'/<div>(.*?)<\/div>/s'
如果没有其他标签,您也可以通过匹配除“<”以外的所有内容来解决此问题:
'/<div>([^<]*)<\/div>/'
另一个观察结果是您不需要使用 /
作为您的正则表达式分隔符。使用另一个字符意味着您不必转义 /
在</div>
,提高可读性。这适用于所有上述正则表达式。如果您使用“#”而不是“/”,它会是这样的:
'#<div>([^<]*)</div>#'
然而,由于嵌套的 div、额外的空格、HTML 注释和各种其他问题,所有这些解决方案都可能失败。 HTML 过于复杂,无法使用 Regex 进行解析,因此您应该考虑改用 HTML 解析器。
关于php - 如何使用正则表达式使点匹配换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1985941/