【发布时间】:2017-09-17 22:07:49
【问题描述】:
我正在寻找一个正则表达式,它将匹配某些内容(包含重复),但前提是它前面没有等号字符 (=) 并且只有在它后面没有和号字符 (&) 的情况下。
例如,假设要匹配的内容由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 之后做一个否定的lookbehind,但由于CONTENT 包含重复,这是不可能的(look behinds 必须有一个固定长度的模式)。
【问题讨论】:
-
您是要匹配单个字符串,还是该内容会出现在文本中的任何位置,例如?
-
^[^=].*[^&]$将匹配您想要的模式。 -
你说CONTENT重复自己是什么意思?
-
CONTENT包含重复的意思,后面跟着 +、* 和/或 {N}。 -
[^=].*[^&]很有趣(而且易于启动)。看来我是想多了。该解决方案的唯一问题(我认为)是它前后至少需要一个字符。因此,如果CONTENT位于 blob 的开头或结尾(或者如果它是整个 blob),那么它将不匹配。就我而言,这个要求可能不是问题。另一个问题是之前的字符和之后的字符将是 matched 内容的一部分,而我只想要CONTENT
标签: regex lookaround