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