如何使用Regex Lookahead匹配紧邻特定闭合标签的目标元素
解决正则匹配紧跟特定闭合标签的目标元素问题
你的问题出在非贪婪匹配结合正向预查时的引擎行为:</strong>后面如果没有紧跟</p>,正则引擎会自动扩展匹配范围,直到找到满足预查条件的位置,所以会把第一个<strong>到第二个</strong>的内容都匹配进去。
要精准匹配紧跟</p>的那个<strong>元素,可以用负向预查限制<strong>内部的内容,避免越过其他</strong>标签,正则表达式如下:
<strong>(?:(?!</strong>).)*</strong>(?=</p>)
正则说明:
<strong>:匹配起始标签(如果需要支持带属性的<strong>,可以改成<strong[^>]*>)(?:(?!</strong>).)*:非捕获组,匹配任意字符,但前提是当前位置后面不是</strong>,确保不会匹配到其他</strong>标签</strong>:匹配闭合标签(?=</p>):正向预查,确保当前位置后面紧跟</p>
如果实际场景中<strong>标签可能包含属性(比如<strong class="foo">),调整后的正则为:
<strong[^>]*>(?:(?!</strong>).)*</strong>(?=</p>)
这个写法能确保只匹配最后那个紧跟</p>的完整<strong>元素,不管前面有多少同类元素。
内容的提问来源于stack exchange,提问作者cabrito
相关产品推荐
相关产品推荐

