如何使用正则表达式使点匹配换行符

2022-08-30 11:51:32

我有一个字符串,其中包含<div>和< / div>之间的普通字符,白色字符集和换行符。

此正则表达式不起作用:.这是因为与换行符不匹配。我该怎么做?/<div>(.*)<\/div>.*


答案 1

您需要使用 DOTALL 修饰符 ()。/s

'/<div>(.*)<\/div>/s'

这可能不会给你你想要的,因为你是贪婪的匹配。相反,您可以尝试不贪婪的匹配:

'/<div>(.*?)<\/div>/s'

如果没有其他标签,您也可以通过匹配除“<”之外的所有内容来解决此问题:

'/<div>([^<]*)<\/div>/'

另一个观察结果是,您不需要用作正则表达式分隔符。使用另一个字符意味着您不必转义 in,从而提高可读性。这适用于上述所有正则表达式。下面是如果您使用“#”而不是“/”,它看起来会是什么样子://</div>

'#<div>([^<]*)</div>#'

但是,由于嵌套的div,额外的空格,HTML注释和各种其他原因,所有这些解决方案都可能失败。HTML太复杂,无法使用正则表达式进行解析,因此您应该考虑改用HTML解析器。


答案 2

要匹配所有字符,您可以使用以下技巧:

%\<div\>([\s\S]*)\</div\>%

推荐