如果被特定模式包围,则与数字不匹配的正则表达式

时间:2017-04-21 03:52:05

标签: regex lookaround

我正在寻找一个匹配某些内容(包含重复内容)的正则表达式,但前提是它前面没有等号字符(=),并且只有在它后面没有&符号(&)时才会出现。

例如,假设要匹配的内容由CONTENT表示。我认为这个问题并不重要,只是因为匹配的内容很长,所以我不能在我正在使用的应用程序中复制所有内容。 CONTENT可以出现在blob中的任何位置,也可能是唯一的。

CONTENT         // OK, should match
fooCONTENT      // OK, should match
CONTENTfoo      // OK, should match
fooCONTENTfoo   // OK, should match
=CONTENT        // OK, should match
CONTENT&        // OK, should match
=CONTENT&       // NO - SHOULD NOT MATCH

我尝试了类似这样的模式:

(?!=CONTENT&)CONTENT...

但它排除=CONTENT&并不起作用,可能是因为正则表达式引擎只是移过前导=然后满足前瞻。

我考虑在CONTENT之后做一个负面的背后隐藏,但由于CONTENT包含重复,所以不可能(看后面必须有固定的长度模式)。

1 个答案:

答案 0 :(得分:0)

据我了解,您尝试匹配Content 前面有=&成功但不是同时时间。

您可以使用更改来实现,如下所示。

正则表达式: ^=?[^=&]+$|^[^=&]+&?$

<强>解释

^=?[^=&]+$会查找可选的=,后跟除=&以外的多个字符。

^[^=&]+&?$会查找=&以外的多个字符,后跟可选的&

|是强制与任何声明的模式匹配的变更。

Regex101 Demo