用于匹配"ABAB","AABB","ABB","AAB","ABAC"和"ABCB"的C#正则表达式

Pet*_*Lee 2 c# regex

我为编写匹配"ABAB","AABB","ABB","AAB","ABAC"和"ABCB"的正则表达式感到沮丧.

我们以"ABAB"为例,以下所有字符串都将匹配:

abab
bcbc
1212
xyxy
9090
0909
Run Code Online (Sandbox Code Playgroud)

这意味着RegEx应匹配第1和第3个字符相同的字符串,第2个和第4个字符也相同,但第1个和第2个不应该相同(第3个和第4个当然不应该相同).

我能说清楚吗?

谢谢.

彼得

Jul*_*rau 5

ABAB喜欢模式

(\w)(\w(?<!\1))\1\2
Run Code Online (Sandbox Code Playgroud)
  • (\w) 匹配一个单词字符(数字,字母......)并将匹配捕获到反向引用1中
  • (\w...) 匹配一个单词字符(数字,字母......)并将匹配捕获到反向引用2中
  • (?<!\1)声称无法匹配通过捕获组号1匹配的正则表达式与在此位置结束的匹配(负向后观)
  • \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