我有以下正则表达式:
显然它不能被编译,因为
是否有可能否定一个匹配组?
(["'])(\\\1|[^\1])+\1
。显然它不能被编译,因为
[^\1]
是非法的。是否有可能否定一个匹配组?
在正或负字符类中,无法使用向后引用。
但是您可以通过使用负面的前瞻断言来实现您想要的效果:
(["'])(?:\\.|(?!\1).)*\1
解释:
(["']) # Match and remember a quote.
(?: # Either match...
\\. # an escaped character
| # or
(?!\1) # (unless that character is identical to the quote character in \1)
. # any character
)* # any number of times.
\1 # Match the corresponding quote.
(["'])(\\\1|.)+?\1
呢?难道不应该从左到右匹配交替项吗?还是我在这里错过了问题?在 JavaScript 中似乎没问题。 - Felix Kling
[^\1]
将是这些字符的列表...但这只是我的看法。也可能只是正则表达式引擎必须事先知道要期望哪些字符。[\1]
能行吗? - Felix Klingregular-expression.info
上找到了这个信息: "回溯引用也不能在字符类中使用。在大多数正则表达式中,像(a)[\1b]
这样的正则表达式中的\1
将被解释为八进制转义。因此,这个正则表达式将匹配一个后面跟着\x01
或b
的a
。" 如果你想更深入地了解正则表达式,我建议阅读Mastering Regular Expressions by Jeffrey Friedl。 - Felix Kling[^\1]
只是用来说明我想否定索引为1
的组。 - Savva Mikhalevski