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

标签 c# regex

我对编写匹配“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/

相关文章:

c# - 加载页面后如何加载此 ASP.NET div?

c# - 自定义组框未绑定(bind)到绑定(bind)源

用于搜索电子邮件中 ​​ "@"之前的字符的正则表达式模式

javascript - 正则表达式 javascript,为什么点和逗号匹配\

javascript - 如何表示new RegExp()是由未定义的值构造的?

从 Process.Start() 调用时,C# 应用程序随机挂起

C#,使用正则表达式查找和替换单词中的某些字符?

c# - 带有 Nullable 值的 SqlParameter 在 ExecuteNonQuery 时出错?

java - 为什么在针对 XSS 攻击模式进行验证时,非常大的字符串会抛出 java.lang.StackOverflow 异常

mysql - SQL语句中字符串的正则表达式