Java8Regex:模式中的捕获组不';不匹配,但整个模式确实匹配

Java8Regex:模式中的捕获组不';不匹配,但整个模式确实匹配,java,regex,regex-lookarounds,regex-group,Java,Regex,Regex Lookarounds,Regex Group,这是我的第一个问题。很高兴在网上认识大家 我在Java 8中创建了以下正则表达式模式(为了清晰起见,这只是我代码中实际包含的一个简化示例): 第二个1匹配两个用空格分隔的单个数字,例如: 1 1 2 0 4 5 11 20 45 第三个1匹配一行中的两个单个数字,例如: 1 1 2 0 4 5 11 20 45 每个备选方案都使用lookarounds,并且它们的内容对于每个备选方案都必须略有不同-这就是为什么我不能像这样将所有内容放在一起: ([0-9])[, ]?([0-9]) 每

这是我的第一个问题。很高兴在网上认识大家

我在Java 8中创建了以下正则表达式模式(为了清晰起见,这只是我代码中实际包含的一个简化示例):

第二个1匹配两个用空格分隔的单个数字,例如:

1 1
2 0
4 5
11
20
45
第三个1匹配一行中的两个单个数字,例如:

1 1
2 0
4 5
11
20
45
每个备选方案都使用lookarounds,并且它们的内容对于每个备选方案都必须略有不同-这就是为什么我不能像这样将所有内容放在一起:

([0-9])[, ]?([0-9])
每一个匹配的数字都包含在一个捕获组中,现在我有了第二行来“调用”这些捕获的数字,如下所示:

(?<!n)($1 $2|$3 $4|$5 $6)(?!n)
而不是其中任何一项:

n1 1
2,0
45
asd asd asd
问题如下:即使测试文本中没有这些捕获的数字,它也会返回一个匹配,但其中确实有空格。。。所以这里我没有得到匹配,这是正确的:

aaaaaaaaa
bbbbbbbbb
aasdfasdf
但在这里,我得到了以下方面的匹配(最明显的原因是有一个空格):


是否有人知道,尽管第1行未捕获捕获捕获组中的角色,但“非捕获组”部分(即单个空格)将匹配,因此整个模式返回匹配,这是否正常,如果第一行未捕获任何内容,则捕获组可能是第二行中的零长度匹配?提前感谢您对此的评论。

您的正则表达式匹配空格,因为
1,1
字符串的结果模式是
(?),并且它可以匹配既不带空格也不带空格的空格

<强>当在一个<代码>中,一个替换的引用引用不匹配任何字符串。 通过在字符串替换模式中连接替换反向引用,您可以利用此功能以及每个替换正好有两个捕获组的事实,从而完全消除替换:

搜索
(?
替换

请注意反向引用是如何连接的:首先是对奇数组的所有反向引用,然后将对偶数组的所有反向引用放置在无替代模式中


请注意,即使备选方案中的组数不同您也可以在每个组中添加“假”空组,这种方法仍然有效。

我认为简化正则表达式没有任何错误(除了它是一个正则表达式,而且非常复杂:)。可能在编码的正则表达式中有输入错误,因此如果您想要答案,请显示它。但是最好使用String.split和Integer.parseInt或简单易读的东西来解决您的任务。否则,您将解决2个任务。是否可能将(“括号”)与…混淆?…应该如何处理
(?,
(?,
(?do/match?)我有第二句话来“呼出”这些捕获的数字,比如:“我不理解这部分。呼出”是什么意思是?代码有$1、$2等,这表明它是一个替换字符串,但它也有lookbehind和lookahead,这在替换字符串中没有任何作用。您是否尝试使用反向引用或替换?请提供一个。感谢您的评论!需要澄清的几个注释:@VGR这是用于软件检查翻译的代码:在第1行/字段I输入与源(原始)文本匹配的正则表达式模式,在第二行/字段I输入与目标(翻译)匹配的正则表达式模式文本。我可以在其中一行中使用反向引用来“调出”另一行中捕获的内容。这就是为什么我在两行中都使用了lookarounds,它们确保源文本中匹配的内容不分别被“a”、“b”或“c”包围,而目标文本中匹配的内容不被“n”包围。
aaaaaaaaa
bbbbbbbbb
aasdfasdf
abc abc
q w r t y
as df