在我对正则表达式的调试中,我需要找出替代方案中的哪个替代方案实际上导致了匹配。例如,对于目标字符串:
"foo"
使用正则表达式:
"f.*|other"
我需要一种方法来知道在上面的正则表达式中,替代"f.*"
实际上导致了匹配。
在一些具有许多替代项的复杂正则表达式中,这对于调试非常具有挑战性。
在我对正则表达式的调试中,我需要找出替代方案中的哪个替代方案实际上导致了匹配。例如,对于目标字符串:
"foo"
使用正则表达式:
"f.*|other"
我需要一种方法来知道在上面的正则表达式中,替代"f.*"
实际上导致了匹配。
在一些具有许多替代项的复杂正则表达式中,这对于调试非常具有挑战性。
如果每个备选方案都包含在其自己的捕获组中,则您知道这些组中只有一个可以参加比赛。当您查询它们时,其他人将返回 null 或未定义的值。因此,您只需遍历捕获组,直到找到一个不为空的组。详细过程将取决于您使用的正则表达式风格和/或编程语言;有很多变化。
因此,如果您的正则表达式是(f.*)|(other)
并且它匹配foo
,则 group #1 将包含foo
并且 group #2 将为 null (或nil
, 或undef
,具体取决于您使用的语言;但请注意,空字符串通常表示成功匹配,但没有'不消耗任何字符)。
(?<MYRESULT>(?<RESULT1>f.*)|(?<RESULT2>other))
现在 MYRESULT 和 RESULT1 或 RESULT2 都将包含您的匹配项。