2015-09-21 36 views
0

下面是使用命名組一些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") 

enter image description here

有關於這一主題的另一個SOF問題接觸中訪問但爲五(Java7推出之前支持命名組):Scala regex Named Capturing Groups

但是那個不能解決scala的這種情況2.11/java8

回答

1

Scala 2.12需要Java 8並且可以改進API。

同時,樣品延伸:

https://github.com/som-snytt/regextractor/blob/master/core/src/test/scala/regex/GrTest.scala#L85

在另一靜脈,https://github.com/travisbrown/expressier

+0

THX爲缺乏在組原生階支撐的確認。要使用上述任何一種方式,需要將類(和宏)文件複製到我自己的項目中? (當然,他們沒有maven repo ..) – javadba

+0

sbt讓你依賴github源代碼項目,所以人們懶得發佈例子項目。 –

+0

哦,這很有趣。我想知道maven是否有類似的能力。我添加了一個答案,作爲擴展的評論來展示如何使用maven。 – javadba

1

這是更從SOM-snytt接受的答案的擴展的評論。他提到的擴展可能被直接作爲依賴包含在sbt中。 Maven的需要多一點的工作:通過包括以下的jitpack混帳到Maven的工具:

Try jitpack, you just need to add the dependency, jitpack will build others for you. 

Can I use a GitHub project directly in Maven?

From home page: 

jitpack 
Easy to use package repository for Gradle and Maven projects 
JitPack builds GitHub projects on demand and provides ready-to-use packages 
HOW 

Add repository first 
<repository> 
    <id>jitpack.io</id> 
    <url>https://jitpack.io</url> 
</repository> 
Add dependency 
<dependency> 
    <groupId>com.github.User</groupId> 
    <artifactId>Repo name</artifactId> 
    <version>Release tag</version> 
</dependency>