如何将a^nb^n与Java正则表达式匹配?
这是一系列教育准则文章的第二部分。它展示了如何使用查找头和嵌套引用来匹配非正则语言a。nbn..嵌套引用首先在以下内容中引入:这个正则表达式是如何找到三角数的?
一个典型的非-正规语言是:
L = { a
nb
n: n > 0 }
这是所有非空字符串的语言,由若干个a
之后是相同数量的b
该语言中字符串的示例如下ab
, aabb
, aaabbb
.
此语言可以显示为非常规语言。泵引理..它实际上是一个原型上下文无关语言,它可以由上下文无关语法 S → aSb | ab
.
尽管如此,现代regex实现清楚地认识到的不仅仅是普通语言。也就是说,从形式语言理论的定义来看,它们并不是“规则”的。PCRE和Perl支持递归regex,而.NET支持平衡组定义。更少的“花哨”特性,例如反向引用匹配,意味着正则表达式是不正常的。
但是这些“基本”功能到底有多强大呢?我们能认出L
例如,使用Java regex?我们是否可以将查找器和嵌套引用组合在一起,并有一个可以与之协同工作的模式呢?String.matches
来匹配字符串,如ab
, aabb
, aaabbb
等等?
参考文献
相关问题