我们正在学习常规语言和正则表达式之间的区别,老师解释说,常规语言是由有限的字符集组成的字符串集合,而正则表达式是一种用于匹配和操作文本的工具,它可以匹配各种复杂的模式。
a^n b^n
虽然不是正则表达式,但她说大多数正则表达式语言都可以匹配
a^n A^n
她给我们布置了这个额外学分作业问题。我们已经苦苦挣扎了几天,非常需要一些指导。
a^n b^n
虽然不是正则表达式,但她说大多数正则表达式语言都可以匹配
a^n A^n
她给我们布置了这个额外学分作业问题。我们已经苦苦挣扎了几天,非常需要一些指导。
老师通过将字母表限制为{a,A}
来给了一个很大的提示。解决这个问题的关键是意识到在不区分大小写模式下,a
与A
匹配并且反之亦然。问题的另一个组成部分是在反向引用上进行匹配。
此模式将匹配a{n}A{n}
(如在rubular.com上所示),其中n
为某个数字:
^(?=(a*)A*$)\1(?i)\1$
该模式的工作方式如下:
^(?=(a*)A*$)
- 锚定在字符串开头,使用正向先行断言看是否可以匹配(a*)A*
直到字符串结尾。
\1
捕获a{n}
序列。a{n}A{n}
,因为它甚至不是a*A*
。\1(?i)\1$
,也就是\1
捕获的a{n}
,然后再次匹配a{n}
直到字符串结尾,在不区分大小写的模式 (?i)
中。a*A*
\1
是a{n}
\1(?i)\1
只能是a{n}A{n}