下面是使用命名组一些Scala的匹配代码:Scala 2.11(/ java8)matcher不允许命名捕获组?
val regex=".*Completed (?<tstamp>[\d]{4}-[\d]{6})/(?<tname>[\w]+) (?<loops>[\d]+)Loops (?<cores>[\d]+)cores (?<mem>[\d]+)mb (?<inrecs>[\d]+)recs (?<nparts>[\d]+)parts (?<xform>[\w]+) (?<action>[\w]+) - duration=(?<duration>[\d]+\.[\d]+) seconds count=(?<outrecs>[\d]+).*"
val rmatch = meta.regex.findFirstMatchIn(line)
输入是:
<03:54:26> Completed 0917-035231/CpuMem 100000000Loops 16cores 128mb 5000000recs 20parts GroupByKey Count - duration=41.408 seconds count=5000000
我们可以在监视屏幕截图为模式(第三项)看到第一捕获组名为tstamp
。它得到恰当捕获和查看
m[atch].group(1)
然而,它是不命名组
m[atch].group("tstamp")
有关于这一主题的另一个SOF问题接触中访问但为五(Java7推出之前支持命名组):Scala regex Named Capturing Groups
但是那个不能解决scala的这种情况2.11/java8
THX为缺乏在组原生阶支撑的确认。要使用上述任何一种方式,需要将类(和宏)文件复制到我自己的项目中? (当然,他们没有maven repo ..) – javadba
sbt让你依赖github源代码项目,所以人们懒得发布例子项目。 –
哦,这很有趣。我想知道maven是否有类似的能力。我添加了一个答案,作为扩展的评论来展示如何使用maven。 – javadba