匹配前一组

时间:2016-10-04 14:03:36

标签: ruby regex

基本上,我需要\k\g的组合。

以下是一个例子:

我有"123045 ; 67089"形式的字符串。只有当数字末尾的相同位置的两个数字中都有重复数字时,我才必须匹配。在这种情况下,0中的123045距离数字末尾的两个位置与0中的67089一样。

问题在于,如果我使用反向引用,则数字的整个余数必须匹配(aka 4589):

^\d*(\d)(\d*) ; \d*\1\2$

如果我使用模式重新执行,我必须提供剩余的特定字符数(在这种情况下为两个):

^\d*(\d)(\d{2}) ; \d*\1\g<2>$

是的,它必须在一个正则表达式中。

1 个答案:

答案 0 :(得分:3)

你在这里遇到的是一个平衡问题。您可以使用递归来解决它,我的方法是:

^\d*(\d)(?:(\d(?:(\s*;\s*\d*\1)|\g<2>)\d)|\g<3>)$

这将\s*;\s*\d*\1作为两个平衡数字组之间的内容。要退出递归,此内容必须完全匹配一次(以避免匹配12212;1;13)。作为替换的内容的递归是针对双位数是每个数字的最后一位的情况。

您可以找到一些测试用例here