如何匹配不包含特定子串的子串?

3

我正在尝试匹配一个不包含特定子字符串"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>

我尝试过的方法:
我尝试使用负向前瞻,但仍会匹配含有 href 子字符串的 a 标签。

<a class="link.*?(?!href).*?<\/a>
1个回答

4

你可以使用这个正则表达式:

<a (?![^<>]*href)[^>]*>.*?<\/a>

正则表达式演示

正则表达式细节:

  • <a :匹配<a
  • (?![^<>]*href):否定预查,确保在不包含0个或多个不是<>的字符之后没有href
  • [^>]*:匹配0个或多个不为>的字符
  • >:匹配>
  • .*?:匹配0个或多个任意字符
  • <\/a>:匹配</a>

1
使用正则表达式中的前瞻和后顾进行了很好的解释。哇,太棒了... - Art Bindu
1
@anubhava 不是关于这个问题的,但是一般来说。我看到你为Java编写了一个正则表达式的书。我根本不使用Java。然而,我想了解正则表达式。你的书在这方面有帮助吗?还是太专注于Java了? - Tryer
2
@Tryer:我的书有很多深入的正则表达式信息,但主要是以Java为中心的。如果你不熟悉Java,我建议你参考这个优秀的在线教程:https://www.regular-expressions.info/tutorial.html - anubhava

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接