【发布时间】:2010-06-27 14:08:42
【问题描述】:
我们正在学习正则语言和正则表达式的区别,老师解释说语言
a^n b^n
不是正则,但她说大多数正则表达式都可以匹配
a^n A^n
她为我们的额外学分作业问题提出了这个问题。我们已经苦苦挣扎了几天,真的可以使用一些指导。
【问题讨论】:
-
@kch 问题是你如何用正则表达式匹配该语言的字符串?
标签: regex
我们正在学习正则语言和正则表达式的区别,老师解释说语言
a^n b^n
不是正则,但她说大多数正则表达式都可以匹配
a^n A^n
她为我们的额外学分作业问题提出了这个问题。我们已经苦苦挣扎了几天,真的可以使用一些指导。
【问题讨论】:
标签: regex
老师通过将字母限制为{a, A} 给出了一个巨大的提示。解决这个问题的关键是意识到在不区分大小写模式下,a 匹配 A,反之亦然。问题的另一个组成部分是反向引用匹配。
此模式将匹配a{n}A{n} 某些n (as seen on rubular.com):
^(?=(a*)A*$)\1(?i)\1$
该模式的工作原理如下:
^(?=(a*)A*$) - 锚定在字符串的开头,我们使用正向前瞻来查看是否可以匹配 (a*)A* 直到字符串的结尾
\1 捕获a{n} 的序列
a{n}A{n},因为它甚至不是a*A*
\1(?i)\1$,即\1捕获的a{n},然后在不区分大小写的模式下(?i),我们再次匹配a{n}直到结束字符串a*A*
\1 是 a{n}
\1(?i)\1 只能是a{n}A{n}
【讨论】: