正则表达式 NOT 操作

Posted

技术标签:

【中文标题】正则表达式 NOT 操作【英文标题】:Regex NOT Operation 【发布时间】:2013-10-07 05:02:03 【问题描述】:

我有一个条件,我必须选择不属于 span 标签的任何内容。

输入 -

the <span class='ptc-highlightedSearchResult'>PISTON</span> has their <span class='ptc-highlightedSearchResult'>ROD</span> ring

选择&lt;span&gt;标签及其内容的正则表达式 -

(<span[^>]+class\s*=\s*("|')ptc-highlightedSearchResult\2[^>]*>)[^<]*(</span>)

我可以选择跨度及其内容中的任何内容,但不能选择其他内容。任何关于 NOT 操作的帮助将不胜感激。

【问题讨论】:

为什么不使用已经处理 XML 或 html 的库呢?正则表达式不是最适合这样的标记,你可以在整个 SO 中找到。 @BLaZuRE - 我不能使用它们,我对编辑有一些限制,只能使用正则表达式。请传递您的建议。 我假设docs.oracle.com/javase/1.4.2/docs/api/javax/xml/parsers/… 不会帮助你?试试这个关于 not 运算符的更多信息:***.com/questions/7317043/regex-not-operator @Devendraw 您可以在替换中使用此正则表达式来删除所有跨度,您将离开外面的东西。 @Jerry - 抱歉,我也无法删除 span 和 span 的内容。我只想选择剩余的文本并希望在用户输入他的输入时突出显示它们。所以 标签将继续添加到页面上。请建议正则表达式避免它们及其内容并选择其他字符串部分。 【参考方案1】:

你可以用这个:

((?:(?![^<>]*(?:>))[^<](?![^<>]*</))+)

regex101 demo

它将匹配不在开始标签和结束标签之间或之间的任何文本。演示中对正则表达式进行了细分。

【讨论】:

以上是关于正则表达式 NOT 操作的主要内容,如果未能解决你的问题,请参考以下文章