匹配a ^ n A ^ n与正则表达式

时间:2010-06-27 14:08:43

标签: regex

我们正在学习常规语言和正则表达式之间的区别,老师解释说语言

a^n b^n

不规律,但她说大多数正则表达式都可以匹配

a^n A^n

她为我们额外的学分作业问题提出了这个问题。我们现在已经苦苦挣扎了几天,并且可以真正使用一些指导。

1 个答案:

答案 0 :(得分:11)

老师通过将字母表限制为{a, A}来提供巨大的提示。解决此问题的关键是要意识到在不区分大小写的模式下,a匹配A,反之亦然。问题的另一个组成部分是反向引用匹配。

对于某些a{n}A{n}as seen on rubular.com),此模式将与n匹配:

^(?=(a*)A*$)\1(?i)\1$

如何运作

该模式的工作原理如下:

  • ^(?=(a*)A*$) - 锚定在字符串的开头,我们使用正向前瞻来查看我们是否可以匹配(a*)A*直到字符串结尾
    • 如果我们可以成功地做出这个断言,那么\1会捕获a{n}
    • 的序列
    • 如果断言失败,则字符串无法a{n}A{n},因为它甚至不是a*A*
  • 然后我们匹配\1(?i)\1$,即a{n}捕获的\1,然后不区分大小写 (?i),我们匹配再次a{n}直到字符串结尾
  • 因此,因为:
    • 字符串为a*A*
    • \1a{n}
    • \1(?i)\1只能是a{n}A{n}

相关问题

参考

另见