我对编写匹配“ABAB”、“AABB”、“ABB”、“AAB”、“ABAC”和“ABCB”的正则表达式感到沮丧。
以“ABAB”为例,以下所有字符串都会被匹配:
abab
bcbc
1212
xyxy
9090
0909
这意味着正则表达式应该匹配第一个和第三个字符相同的字符串,第二个和第四个字符也相同,但第一个和第二个字符不应该相同(当然,第三个和第四个字符不应该相同)。
我说清楚了吗?
谢谢。
彼得
最佳答案
ABAB 类似模式
(\w)(\w(?<!\1))\1\2
-
(\w)
匹配单词字符(数字、字母...)并将匹配捕获到反向引用 1 -
(\w...)
匹配单词字符(数字、字母...)并将匹配捕获到反向引用 2 -
(?<!\1)
断言不可能将通过捕获组号 1 匹配的正则表达式与在此位置结束的匹配 ( negative lookbehind ) 进行匹配 -
\1
匹配与最近通过捕获组编号 1 匹配的相同文本 -
\2
匹配与最近通过捕获组编号 2 匹配的相同文本
其他模式
-
AABB
==>(\w)\1(\w(?<!\1))\2
-
ABB
==>(\w)(\w(?<!\1))\2
-
AAB
==>(\w)\1(\w(?<!\1))
-
ABAC
==>(\w)(\w(?<!\1))\1(\w(?<!\1|\2))
-
ABCB
==>(\w)(\w(?<!\1))(\w(?<!\1|\2))\2
关于用于匹配 "ABAB"、 "AABB"、 "ABB"、 "AAB"、 "ABAC"和 "ABCB"的 C# 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3888865/