gpt4 book ai didi

regex - Scala 正则表达式命名捕获组

转载 作者:行者123 更新时间:2023-12-03 03:30:30 29 4
gpt4 key购买 nike

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 位服务器 VM,Java 1.6。 给了我这个异常(exception):

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

这里发生的是,在 Regex 的构造函数中,我们提供组 1、2 等的别名。然后我们可以通过这些名称引用这些组。这些名称并不是模式本身固有的。

关于regex - Scala 正则表达式命名捕获组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3029657/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com