Regex 记事本+中使用的组数或正则表达式长度是否有上限+;?

Regex 记事本+中使用的组数或正则表达式长度是否有上限+;?,regex,notepad++,Regex,Notepad++,我不熟悉使用正则表达式。我正在尝试使用Notepad++中的regex查找和替换选项 我使用了以下正则表达式: ((?:)|(\+)|(-))(\d)((?:)|(\+)|(-))(/)((?:)|(\+)|(-))(\d)((?:)|(\+)|(-)) 以下案文: 2/2 +2/+2 -2/-2 2+/2+ 2-/2- 但我只能在前三场比赛中找到对手。最后两个,它只给出部分匹配,不包括最后的“+”和“-”。我想知道对于可以使用的组数(我怀疑不太可能)是否有上限,或者正则表达式的最大长度是否

我不熟悉使用正则表达式。我正在尝试使用Notepad++中的regex查找和替换选项

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

((?:)|(\+)|(-))(\d)((?:)|(\+)|(-))(/)((?:)|(\+)|(-))(\d)((?:)|(\+)|(-))
以下案文:

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

([-+]?)(\d)([-+]?)(/)([-+]?)(\d)([-+]?)
您可以使用这个简单的正则表达式来匹配所有的情况

您可以使用这个简单的正则表达式来匹配所有的情况


这不是Notepad++的正则表达式引擎的问题。问题是,当您有类似
(?:)|(\+)|(
)的替换时,正则表达式引擎将尝试按照指定的顺序匹配不同的选项。由于您首先指定了一个空组,因此它将尝试首先匹配一个空字符串,如果需要回溯,则仅匹配
+
-
。这本质上使交替变为惰性,除非必须匹配,否则它永远不会匹配任何字符

vks的答案非常有效,但如果您真的需要将这些捕获组分开,您也可以这样做,只需重写您的备选方案:

((\+)|(-)|(?:))(\d)((\+)|(-)|(?:))(/)((\+)|(-)|(?:))(\d)((\+)|(-)|(?:))
((\+)|(-)|)(\d)((\+)|(-)|)(/)((\+)|(-)|)(\d)((\+)|(-)|)
或者更简单地说,像这样:

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

这不是Notepad++的正则表达式引擎的问题。问题是,当您有类似
(?:)|(\+)|(
)的替换时,正则表达式引擎将尝试按照指定的顺序匹配不同的选项。由于您首先指定了一个空组,因此它将尝试首先匹配一个空字符串,如果需要回溯,则仅匹配
+
-
。这本质上使交替变为惰性,除非必须匹配,否则它永远不会匹配任何字符

vks的答案非常有效,但如果您真的需要将这些捕获组分开,您也可以这样做,只需重写您的备选方案:

((\+)|(-)|(?:))(\d)((\+)|(-)|(?:))(/)((\+)|(-)|(?:))(\d)((\+)|(-)|(?:))
((\+)|(-)|)(\d)((\+)|(-)|)(/)((\+)|(-)|)(\d)((\+)|(-)|)
或者更简单地说,像这样:

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

这是我的错误,没有提到我需要分开的小组,因为我正在做条件替换。但是你的正则表达式适用于匹配的部分。因为我正在做条件替换,所以没有提到我需要将组分开,这是我的错误。但是你的正则表达式适用于匹配的部分。