如何匹配不包含href子串的<a>标签子字符串
解决不含
href的<a>标签匹配问题 问题分析
你之前使用的正则<a class="link.*?(?!href).*?<\/a>无效,原因是其中的(?!href)仅检查当前位置后紧跟的不是href,但标签内其他位置仍可能出现href属性,无法实现全局排除。
正确正则表达式
要匹配整个标签内不包含href的<a>标签,可以使用以下两种方案:
方案1:前置否定预查(简洁版)
<a\s+(?!.*?href).*?class="link.*?"\s*>.*?<\/a>
(?!.*?href):预查整个<a>标签范围内(从<a开始到>前)不存在href子串.*?:非贪婪匹配,避免跨标签匹配
方案2:逐字符排除(严谨版)
<a\s+(?:(?!href).)*?class="link.*?"(?:(?!href).)*?<\/a>
(?:(?!href).)*?:逐个字符匹配,确保每一步都不会触发href的开头,彻底排除标签内出现href的可能
匹配效果
将上述正则应用到你的待匹配字符串:
blabla bladibla <a class="link-ch" href="add-tt-2021-s18-chapter-4.1.html#ch-9-1-1-21-3">9.1.1.21.3</a> blabla <a class="link-ch" href="add-tt-2021-s18-chapter-4.1.html#ch-9-1-1-21-5">9.1.1.21.5</a> more blabla <a class="link-tbl">tabel 9.1.1.21.6</a>, some more bladibla
会精准匹配到:
<a class="link-tbl">tabel 9.1.1.21.6</a>
内容的提问来源于stack exchange,提问作者MK01111000
相关产品推荐
相关产品推荐

