作为一系列教育正则expression式文章的一部分,这是对嵌套引用的概念的一个温柔的介绍。 前几个三angular形数字是: 1 = 1 3 = 1 + 2 6 = 1 + 2 + 3 10 = 1 + 2 + 3 + 4 15 = 1 + 2 + 3 + 4 + 5 有很多方法来检查一个数字是否是三angular形的。 有这个有趣的技术,使用正则expression式如下: 给定n ,我们首先创build一个长度为n的string,填充相同的字符 然后我们将这个string与模式^(\1.|^.)+$匹配 当且仅当此模式匹配string时, n才是三angular形 以下是一些片段,可以显示出这种语言可以使用多种语言: PHP(在ideone.com上) $r = '/^(\1.|^.)+$/'; foreach (range(0,50) as $n) { if […]
这是一系列教育正则expression式文章的第二部分。 它展示了如何使用前瞻和嵌套的引用来匹配非规范的语言。 首先介绍嵌套引用: 这个正则expression式如何find三angular形数字? 其中一种典型的非正规语言是: L = { a n b n : n > 0 } 这是所有非空string的语言,由一些数字a组成,后面跟着相同数量的b 。 这种语言的string的例子是ab , aabb , aaabbb 。 这个语言可以通过抽象引理显示为不规则的。 它实际上是一个典型的上下文无关语言 ,可以由上下文无关文法 S → aSb | ab S → aSb | ab 。 尽pipe如此,现代的正则expression式实现清楚地认识到不仅仅是正规的语言。 也就是说,它们不是由forms语言理论定义的“规则”。 PCRE和Perl支持recursion正则expression式,.NET支持平衡组定义。 更less的“奇特”特征,例如反向引用匹配,意味着正则expression式不规则。 但是这个“基本”function有多强大呢? 我们可以用Java正则expression式来识别L吗? 我们是否可以将lookaround和嵌套的引用结合在一起,并且有一个与例如String.matches匹配的模式来匹配像ab , aabb , aaabbb等string? 参考 perlfaq6:我可以使用Perl正则expression式来匹配平衡文本吗? MSDN – 正则expression式语言元素 […]