-3

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

b9fgh9f1;2w;111b2b35hw3w3ww55

所以“b2b”和“111”是有效的,但“3ww5”不是。

有人可以帮我吗?

谢谢,尼基尔

4

1 回答 1

-1

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

(.).\1

演示

编辑:

上面的正则表达式只会给你不重叠的匹配,但是因为你想得到所有甚至重叠的匹配,你可以使用这个基于正则表达式的正则表达式,它不会消耗接下来的两个字符,而是将它们分组在 group2 中,以便你想要输出,您可以附加来自 group1 和 group2 的字符。

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

具有重叠匹配的演示

这是一段 Java 代码(我从来没有用 Ruby 编程过),它展示了你可以用你最喜欢的编程语言编写的代码和相同的逻辑。

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
于 2019-02-26T17:34:01.997 回答