我们正在学习常规语言和正则表达式之间的区别,老师解释了这种语言
a^n b^n
Run Code Online (Sandbox Code Playgroud)
不常见,但她说大多数正则表达口味都可以匹配
a^n A^n
Run Code Online (Sandbox Code Playgroud)
她为我们额外的学分作业问题提出了这个问题.我们现在已经苦苦挣扎了几天,并且可以真正使用一些指导.
pol*_*nts 11
老师通过限制字母表给出了巨大的提示{a, A}.解决这个问题的关键是在不区分大小写的模式下实现a匹配A,反之亦然.问题的另一个组成部分是反向引用.
这种模式将匹配a{n}A{n}一些n(如rubular.com上所示):
^(?=(a*)A*$)\1(?i)\1$
Run Code Online (Sandbox Code Playgroud)
该模式的工作原理如下:
^(?=(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}