假设我有以下一行:
one two three
是否可以编写一个将在下面返回的正则表达式?
one three
我当然可以将每个部分放在一个单独的组中,但是可以在一次匹配中捕获它吗?
答案 0 :(得分:2)
简单地说:不,它无法完成(正如您对原始问题的评论中所讨论的那样)。
为了找出原因,让我们更一般地看一下。正则表达式可以建模为(通常是复杂的)deterministic finite automaton,也称为DFA,并且您的平均正则表达式引擎实现为一个。这意味着正则表达式将一次剔除零个或一个字符,并查看它是否与当前令牌匹配。如果不是,它将回溯并尝试在当前阶段匹配任何可能的令牌(完成交替操作|
)。如果无法,它会停止并报告它无法匹配。由于DFA按顺序对输入进行操作,因此根据定义,您所要求的内容基本上是不可能的。