除特定字符串外的正则表达式匹配表达式(无负面前瞻)

regex match expression except specific string (no negative lookahead)

我正在尝试编写一个匹配大多数 HTML 元素的正则表达式,例如:

<script></script>

我想专门为以下 HTML 标记例外:

<b> 

我不想捕捉。有没有办法不用负数 lookahead/lookbehind?

目前我有这样的事情:

((\%3C)|<)[^<b]((\%2F)|\/)*[^<\/b][a-z0-9\%\=\'\(\)\ ]+((\%3E)|>)

https://regex101.com/r/ZxkVMJ/2

它确实有效,但除了

<b> 

它也没有捕获所有 1 个字符的标签

(like <a> for example) 

以及以 b 开头的较长标签,例如

<balloon>

感谢您的帮助

作为免责声明,如果您可以使用任何类型的 XML/HTML 解析器,那么您应该真正使用它来解决当前的问题。如果你被迫在这里使用正则表达式,那么考虑这个模式:

<([^b][^>]*|b[^>]+)>.*?<\/>

这匹配以 b 以外的字母开头的 HTML 标签,或者以 b 开头但后跟一个或多个其他字母的标签字符(因此排除了 <b>)。这是一个工作演示:

Demo