我们正在学习常规语言和正则表达式之间的区别,老师解释说语言
a^n b^n
不规律,但她说大多数正则表达式都可以匹配
a^n A^n
她为我们额外的学分作业问题提出了这个问题。我们现在已经苦苦挣扎了几天,并且可以真正使用一些指导。
答案 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*
\1
是a{n}
\1(?i)\1
只能是a{n}A{n}