在我对正则表达式的调试中,我需要找出替代方案中实际产生匹配的替代方法。例如,对于目标字符串:
"foo"
使用正则表达式:
"f.*|other"
我需要一种方法来知道在上面的正则表达式中,替代"f.*"
实际上导致了匹配。
在一些具有许多替代项的复杂正则表达式中,这对于调试来说非常具有挑战性。
答案 0 :(得分:1)
如果每个替代方案都包含在自己的捕获组中,则您知道其中只有一个组可以参与该匹配。其他人在查询时将返回null或undefined值。所以你只需遍历捕获组,直到找到一个非空的。详细过程取决于您使用的正则表达式和/或编程语言;有很多变化。
因此,如果您的正则表达式为(f.*)|(other)
且匹配foo
,则组#1将包含foo
,组#2将为空(或nil
或{ {1}},取决于您正在使用的语言;但请注意,空字符串通常表示不使用任何字符的成功匹配。
答案 1 :(得分:0)
(?<MYRESULT>(?<RESULT1>f.*)|(?<RESULT2>other))
现在,MYRESULT和RESULT1或RESULT2都将包含您的匹配。