在字符串中查找对

Ste*_*ris 0 java regex

我想知道我是否可以帮助解决这个问题.假设我有一个字符串

34342
Run Code Online (Sandbox Code Playgroud)

我想找到这个字符串中的对数,这将是两个.我该怎么做呢?


编辑:好的我真正想要的是匹配字符串中相同字符的出现.

Dan*_*uis 7

您可以使用反向引用来查找连续出现的事物对:

(\d+)\1
Run Code Online (Sandbox Code Playgroud)

这将匹配一个或多个数字字符,然后再次匹配相同的序列.\1是一个反向引用,它指的是第一个捕获组的内容.


如果要匹配在字符串中多次出现的数字,可以使用类似的模式

(\d)(?=\d*\1)
Run Code Online (Sandbox Code Playgroud)

我们再次使用反向引用,但这次我们也使用了前瞻性.前瞻是零宽度断言,它指定在字符串中的当前位置之后必须匹配(或不匹配,如果使用否定前瞻)但不消耗任何字符或移动正则表达式引擎所处位置的位置.在字符串中.在这种情况下,我们将声明必须再次找到第一个捕获组的内容,但不一定直接在第一个捕获组旁边.通过\d*在前瞻中指定,如果它在相同的数字内,它将仅被视为一对(因此如果数字之间存在空格,则该对将不匹配 - 如果这是不期望的,则\d可以将其更改为.,将匹配任何角色).

它将匹配前3和4 in 34342以及前1,2,3和4 in 12332144.但是请注意,如果你有一个奇数重复,你会得到一个额外的匹配(1112即将匹配前两个1),因为前瞻不消耗.