Regex 如何合并正则表达式组匹配?

Regex 如何合并正则表达式组匹配?,regex,Regex,假设我有下面的一行: one two three 是否可以编写一个返回到下面的正则表达式 one three 我当然可以把每个部分分成一个单独的小组,但有可能在一场比赛中捕捉到这一点吗?简单地说:不,这是不可能的(正如在您最初问题的评论中所讨论的) 为了找出原因,让我们更全面地看一下。正则表达式可以建模为(通常是复杂的),也称为DFA,而您的普通正则表达式引擎是作为一个实现的。这意味着正则表达式一次将发出零个或一个字符的声音,并查看它是否与当前标记匹配。如果没有,它将回溯并尝试在当前阶段匹配

假设我有下面的一行:

one two three
是否可以编写一个返回到下面的正则表达式

one three

我当然可以把每个部分分成一个单独的小组,但有可能在一场比赛中捕捉到这一点吗?

简单地说:不,这是不可能的(正如在您最初问题的评论中所讨论的)


为了找出原因,让我们更全面地看一下。正则表达式可以建模为(通常是复杂的),也称为DFA,而您的普通正则表达式引擎是作为一个实现的。这意味着正则表达式一次将发出零个或一个字符的声音,并查看它是否与当前标记匹配。如果没有,它将回溯并尝试在当前阶段匹配任何可能的令牌(通过交替操作完成)。如果无法,它将停止并报告它无法匹配。因为DFA是按顺序对输入进行操作的,所以从定义上讲,您所要求的基本上是不可能的。

一个匹配,是的(如单一模式),但您仍然需要两组。一般来说,捕获组捕获字符串的连续部分-由于
one
three
不连续,您需要两个捕获组。是的,但我想知道是否有一些正则表达式魔术可以将它们合并到一个组中。没有匹配不连续文本的正则表达式引擎,您可以在代码中实现这一点。一个带有捕获组和反向引用的正则表达式替换操作可以完成这项工作。我不能在代码中完成这项工作,这就是为什么我要问这个问题。反对票是怎么回事?