4
基本上,我需要组合\k
和\g
。匹配与前一组匹配的字符数量相同
下面是一个例子:
我具有在"123045 ; 67089"
形式的字符串。只有在数字结尾的同一位置上两个数字都有重复数字时,我才必须匹配。在这种情况下,123045
中的0
与数字的末尾相距两个位置,67089
中的0
也是如此。
的问题是,如果我使用反向引用,数字的整个剩余部分必须匹配(又名45
与89
):
^\d*(\d)(\d*) ; \d*\1\2$
如果我使用模式的重新执行,我不得不放弃剩余字符的特定数目(在这种情况下 - 2):
^\d*(\d)(\d{2}) ; \d*\1\g<2>$
是的,它必须在一个单一的正则表达式中。
只是一个非常快速的出手,不知道是否Ruby支持PCRE完全,不充分的测试:https://regex101.com/r/u0ZBdR/3 –
@SebastianProske:红宝石正则表达式在Onigmo上运行,而不是PCRE。它通过'\ g'符号来支持递归。使用[Rubular](http://rubular.com)来测试Ruby正则表达式模式。 –
@SebastianProske,这很聪明,我应该想到类似的东西。即使它不处理无效输入,但可以调整。发布这个答案(只需用'\ g <2>'替换'(?2)')。 – ndn