加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala正则表达式命名捕获组

发布时间:2020-12-16 09:19:57 所属栏目:安全 来源:网络整理
导读:在 scala.util.matching.Regex trait MatchData年,我看到有支持群组名称,我认为这与( Regex Named Capturing Groups) 但是从Java does not support groupnames until version 7起,据我所知(ref),Scala版本2.8.0(Java HotSpot(TM)64位服务器虚拟机,Java 1.6.
在 scala.util.matching.Regex trait MatchData年,我看到有支持群组名称,我认为这与( Regex Named Capturing Groups)

但是从Java does not support groupnames until version 7起,据我所知(ref),Scala版本2.8.0(Java HotSpot(TM)64位服务器虚拟机,Java 1.6.给了我这个例外:

scala> val pattern = """(?<login>w+) (?<id>d+)""".r
java.util.regex.PatternSyntaxException: Look-behind group does not have an obvio
us maximum length near index 11
(?<login>w+) (?<id>d+)
           ^
        at java.util.regex.Pattern.error(Pattern.java:1713)
        at java.util.regex.Pattern.group0(Pattern.java:2488)
        at java.util.regex.Pattern.sequence(Pattern.java:1806)
        at java.util.regex.Pattern.expr(Pattern.java:1752)
        at java.util.regex.Pattern.compile(Pattern.java:1460)

那么问题是Scala支持的命名集群?如果有这样的例子呢?

解决方法

恐怕Scala的命名组没有定义相同的方式.它只不过是原始模式中未命名(即编号的)组的后处理别名.

以下是一个例子:

import scala.util.matching.Regex

object Main {
   def main(args: Array[String]) {
      val pattern = new Regex("""(w*) (w*)""","firstName","lastName");
      val result = pattern.findFirstMatchIn("James Bond").get;
      println(result.group("lastName") + "," + result.group("firstName"));
   }
}

打印(as seen on ideone.com):

Bond,James

这里发生的是在正则表达式的构造函数中,我们提供了组1,2的别名,然后可以通过这些名称来引用这些组.这些名字在模式本身并不是内在的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读