Notepad++ 中使用的组数或正则表达式的长度是否有上限?

Is there any upper limit for number of groups used or the length of the regex in Notepad++?

我刚开始使用正则表达式。我正在尝试使用 Notepad++ 中的正则表达式查找和替换选项。

我使用了以下正则表达式:

((?:)|(\+)|(-))(\d)((?:)|(\+)|(-))(/)((?:)|(\+)|(-))(\d)((?:)|(\+)|(-))

对于以下文字:

2/2
+2/+2
-2/-2
2+/2+
2-/2-

但我只能匹配到前三个。最后两个,它只给出部分匹配,不包括最后的“+”和“-”。我想知道是否有可以使用的组数上限(我怀疑这不太可能)或正则表达式的最大长度有任何上限。我不确定为什么我的正则表达式失败。或者如果我的正则表达式有什么问题,请更正。

([-+]?)(\d)([-+]?)(/)([-+]?)(\d)([-+]?)

您可以使用这个简单的正则表达式来匹配这里的所有 cases.See。

https://www.regex101.com/r/fG5pZ8/19

这不是 Notepad++ 的正则表达式引擎的问题。问题是,当您有像 (?:)|(\+)|(-) 这样的交替时,正则表达式引擎将尝试按照指定的顺序 匹配不同的选项 。由于您首先指定了一个空组,它会首先尝试匹配一个空字符串,只有在需要回溯时才匹配 +- 。这实质上使交替 惰性 ——它永远不会匹配任何字符,除非它必须这样做。

vks's answer works perfectly well,但以防万一你真的需要将那些捕获组分开,你可以通过重写你的交替来做同样的事情:

((\+)|(-)|(?:))(\d)((\+)|(-)|(?:))(/)((\+)|(-)|(?:))(\d)((\+)|(-)|(?:))

或者更简单,像这样:

((\+)|(-)|)(\d)((\+)|(-)|)(/)((\+)|(-)|)(\d)((\+)|(-)|)