olu*_*ies 16 regex string scala pattern-matching capturing-group
在scala.util.matching.Regex trait MatchData中我看到支持组名,我认为这与(Regex Named Capturing Groups)有关
但是由于Java在版本7之前不支持组名,因为我理解它(参考),Scala版本2.8.0(Java HotSpot(TM)64位服务器VM,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)
Run Code Online (Sandbox Code Playgroud)
所以问题是Scala支持的命名捕获组?如果是这样的话有什么例子吗?
pol*_*nts 26
我担心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"));
}
}
Run Code Online (Sandbox Code Playgroud)
打印(如ideone.com上所示):
Bond, James
Run Code Online (Sandbox Code Playgroud)
这里发生的是,在构造函数中Regex
,我们为组1,2等提供别名.然后我们可以通过这些名称来引用这些组.这些名称本身并不是模式本身.