寻找围绕任何字符之一(包括自身)的任何字符

时间:2019-02-26 17:30:30

标签: regex rubular

我正在尝试编写一个正则表达式代码,以查找在以下字符串中包含任何字符(包括其自身)的任何字符的所有示例:

b9fgh9f1; 2w; 111b2b35hw3w3ww55

因此,“ b2b”和“ 111”有效,但“ 3ww5”无效。

有人可以在这里帮我吗?

谢谢, 尼基尔

1 个答案:

答案 0 :(得分:-1)

您可以使用此正则表达式来匹配三个字符,其中第一个和第三个相同(使用反向引用),中间可以是任意字符,

(.).\1

Demo

编辑:

上面的正则表达式只会为您提供不重叠的匹配项,但是当您希望获得所有甚至重叠的匹配项时,您可以使用基于正向前瞻性的正则表达式,它不会消耗接下来的两个字符,而是将它们分组在group2中,因此对于所需的输出,您可以追加group1和group2中的字符。

(.)(?=(.\1))

Demo with overlapping matches

这是Java代码(我从未用Ruby编程过),展示了该代码以及可以使用fav编程语言编写的相同逻辑。

String s = "b9fgh9f1;2w;111b2b35hw3w3ww55";
Pattern p = Pattern.compile("(.)(?=(.\\1))");
Matcher m = p.matcher(s);

while(m.find()) {
    System.out.println(m.group(1) + m.group(2));
}

打印所有预期的匹配项,

111
b2b
w3w
3w3
w3w

此外,如果您了解Python,这是一个Python代码,

import re

s = 'b9fgh9f1;2w;111b2b35hw3w3ww55'

matches = re.findall(r'(.)(?=(.\1))',s)
for m in re.findall(r'(.)(?=(.\1))',s):
 print(m[0]+m[1])

打印所有预期的匹配项,

111
b2b
w3w
3w3
w3w