1

在我对正则表达式的调试中,我需要找出替代方案中的哪个替代方案实际上导致了匹配。例如,对于目标字符串:

"foo"

使用正则表达式:

"f.*|other"

我需要一种方法来知道在上面的正则表达式中,替代"f.*"实际上导致了匹配。

在一些具有许多替代项的复杂正则表达式中,这对于调试非常具有挑战性。

4

2 回答 2

1

如果每个备选方案都包含在其自己的捕获组中,则您知道这些组中只有一个可以参加比赛。当您查询它们时,其他人将返回 null 或未定义的值。因此,您只需遍历捕获组,直到找到一个不为空的组。详细过程将取决于您使用的正则表达式风格和/或编程语言;有很多变化。

因此,如果您的正则表达式是(f.*)|(other)并且它匹配foo,则 group #1 将包含foo并且 group #2 将为 null (或nil, 或undef,具体取决于您使用的语言;但请注意,空字符串通常表示成功匹配,但没有'不消耗任何字符)。

于 2011-03-09T08:50:59.080 回答
0
(?<MYRESULT>(?<RESULT1>f.*)|(?<RESULT2>other))

现在 MYRESULT 和 RESULT1 或 RESULT2 都将包含您的匹配项。

于 2011-03-09T08:44:32.487 回答