如何用正则表达式匹配指定的HTML分组代码?
正则匹配HTML中指定div及其对应闭合标签的解决方法
你的正则/<div class="def">(.*)</div>/isU之所以无法匹配到目标</div>,是因为U修饰符开启了非贪婪模式,会在遇到第一个</div>就停止匹配——也就是匹配到了内层jkl的闭合标签,而非def对应的那个。
针对你的HTML结构,这里提供两种可行的正则方案:
方案1:利用平衡组处理嵌套结构(推荐,适配复杂嵌套场景)
适用于def内部有多层嵌套div的情况,能精准匹配到对应def的闭合标签:
/<div class="def">((?:(?!<div class="def">|<\/div>).|(?R))*)<\/div>/is
- 逻辑说明:
<div class="def">精准匹配目标开标签(?:(?!<div class="def">|<\/div>).|(?R))*:要么匹配任意非def开/闭合标签的字符,要么递归匹配整个模式(处理内层嵌套的div结构)<\/div>匹配def对应的闭合标签
方案2:利用正向断言定位倒数第二个</div>
如果你的HTML结构固定(def的闭合标签就是倒数第二个</div>),可以用正向断言快速定位:
/<div class="def">(.*?)<\/div>(?=\s*<\/div>)/is
- 逻辑说明:
.*?非贪婪匹配内层内容(?=\s*<\/div>)正向断言确保当前匹配的</div>后面跟着空白字符和最后一个</div>,从而锁定倒数第二个目标标签
内容的提问来源于stack exchange,提问作者wwwampy
相关产品推荐
相关产品推荐

