基本上,我需要 \k
的组合和 \g
.
这是一个例子:
我有 "123045 ; 67089"
形式的字符串.仅当两个数字中相对于数字末尾的相同位置上有重复数字时,我才必须匹配它。在这种情况下,0
在 123045
距离数字末尾两个位置,0
也是如此。在 67089
.
问题是,如果我使用反向引用,数字的全部剩余部分必须匹配(又名 45
与 89
):
^\d*(\d)(\d*) ; \d*\1\2$
如果我使用模式重新执行,我必须给出具体的剩余字符数(在本例中为两个):
^\d*(\d)(\d{2}) ; \d*\1\g<2>$
是的,它必须在一个正则表达式中。
最佳答案
你在这里面临的是一个平衡问题。可以用递归来解决,我的做法是:
^\d*(\d)(?:(\d(?:(\s*;\s*\d*\1)|\g<2>)\d)|\g<3>)$
这会将\s*;\s*\d*\1
作为两组平衡数之间的内容。为了摆脱递归,此内容必须恰好匹配一次(以避免像 122
或 12;1;13
这样的匹配)。递归到此内容作为交替是针对双位数是每个数字的最后一位的情况。
你可以找到一些测试用例here
关于ruby - 匹配与上一组匹配的相同数量的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39854400/