Questions tagged «capturing-group»



3
我们如何将a ^ nb ^ n与Java正则表达式匹配?
这是一系列教育正则表达式文章的第二部分。它显示了如何使用前瞻和嵌套引用来匹配非常规语言a n b n。嵌套引用首先在以下地方引入:此正则表达式如何查找三角数? 原型非常规语言之一是: L = { añ bñ: n > 0 } 这是所有非空字符串的语言,其中包括一定数量的,a后跟相等数量b的。在这个语言字符串的例子有ab,aabb,aaabbb。 抽引引理可以证明这种语言是不规则的。实际上,它是原型上下文无关的语言,可以由上下文无关的语法 生成S → aSb | ab。 尽管如此,现代正则表达式实现显然不仅仅可以识别常规语言。也就是说,根据形式语言理论的定义,它们不是“正常的”。PCRE和Perl支持递归正则表达式,.NET支持平衡组定义。更少的“花哨”功能(例如反向引用匹配)意味着正则表达式不是常规的。 但是,这种“基本”功能到底有多强大?L例如,我们可以用Java正则表达式识别吗?我们也许可以结合lookarounds和嵌套引用,并有一个模式,与如作品String.matches来匹配字符串一样ab,aabb,aaabbb,等? 参考文献 perlfaq6:我可以使用Perl正则表达式来匹配平衡文本吗? MSDN-正则表达式语言元素-平衡组定义 pcre.org-PCRE手册页 regular-expressions.info - Lookarounds和分组和反向引用 java.util.regex.Pattern 关联问题 环视是否会影响正则表达式可以匹配哪些语言? .NET Regex平衡组与PCRE递归模式



5
使用正则表达式的Scala捕获组
假设我有以下代码: val string = "one493two483three" val pattern = """two(\d+)three""".r pattern.findAllIn(string).foreach(println) 我希望findAllIn只返回483,但是它返回了two483three。我知道我只能unapply提取那一部分,但是我必须为整个字符串设置一个模式,例如: val pattern = """one.*two(\d+)three""".r val pattern(aMatch) = string println(aMatch) // prints 483 是否有另一种方法可以实现,而不必java.util直接使用类,也可以不使用unapply?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.