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。
这不是 Notepad++ 的正则表达式引擎的问题。问题是,当您有像 (?:)|(\+)|(-)
这样的交替时,正则表达式引擎将尝试按照指定的顺序 匹配不同的选项 。由于您首先指定了一个空组,它会首先尝试匹配一个空字符串,只有在需要回溯时才匹配 +
或 -
。这实质上使交替 惰性 ——它永远不会匹配任何字符,除非它必须这样做。
vks's answer works perfectly well,但以防万一你真的需要将那些捕获组分开,你可以通过重写你的交替来做同样的事情:
((\+)|(-)|(?:))(\d)((\+)|(-)|(?:))(/)((\+)|(-)|(?:))(\d)((\+)|(-)|(?:))
或者更简单,像这样:
((\+)|(-)|)(\d)((\+)|(-)|)(/)((\+)|(-)|)(\d)((\+)|(-)|)
我刚开始使用正则表达式。我正在尝试使用 Notepad++ 中的正则表达式查找和替换选项。
我使用了以下正则表达式:
((?:)|(\+)|(-))(\d)((?:)|(\+)|(-))(/)((?:)|(\+)|(-))(\d)((?:)|(\+)|(-))
对于以下文字:
2/2
+2/+2
-2/-2
2+/2+
2-/2-
但我只能匹配到前三个。最后两个,它只给出部分匹配,不包括最后的“+”和“-”。我想知道是否有可以使用的组数上限(我怀疑这不太可能)或正则表达式的最大长度有任何上限。我不确定为什么我的正则表达式失败。或者如果我的正则表达式有什么问题,请更正。
([-+]?)(\d)([-+]?)(/)([-+]?)(\d)([-+]?)
您可以使用这个简单的正则表达式来匹配这里的所有 cases.See。
这不是 Notepad++ 的正则表达式引擎的问题。问题是,当您有像 (?:)|(\+)|(-)
这样的交替时,正则表达式引擎将尝试按照指定的顺序 匹配不同的选项 。由于您首先指定了一个空组,它会首先尝试匹配一个空字符串,只有在需要回溯时才匹配 +
或 -
。这实质上使交替 惰性 ——它永远不会匹配任何字符,除非它必须这样做。
vks's answer works perfectly well,但以防万一你真的需要将那些捕获组分开,你可以通过重写你的交替来做同样的事情:
((\+)|(-)|(?:))(\d)((\+)|(-)|(?:))(/)((\+)|(-)|(?:))(\d)((\+)|(-)|(?:))
或者更简单,像这样:
((\+)|(-)|)(\d)((\+)|(-)|)(/)((\+)|(-)|)(\d)((\+)|(-)|)