[英]Is it possible to make non-capturing groups work in scala regexes when pattern matching
據我所知,非文檔中的非捕獲組由(:?)定義,就像在Java中一樣。 (我相信它是相同的底層庫)。
但是,這似乎不起作用:
var R = "a(:?b)c".r
R.findFirstMatchIn("abc").get.group(1)
返回“b”(當它應為空時)。 我懷疑這通常不是問題,但在進行模式匹配時,這意味着我現在無法做到:
"abc" match {case R => println("ok");case _ => println("not ok")}
> not ok
我要做:
"abc" match {case R(x) => println("ok");case _ => println("not ok")}
> ok
有沒有辦法讓這項工作“按預期”進行?
除了正確的答案,請使用val和parens:
scala> val R = "a(?:b)c".r // use val
R: scala.util.matching.Regex = a(?:b)c
scala> "abc" match {case R() => println("ok");case _ => println("not ok")} // parens not optional
ok
您也可以始終使用通配符序列,而不關心是否指定了捕獲組。 我最近發現了這一點,發現它最清晰,最強大。
scala> "abc" match {case R(_*) => println("ok");case _ => println("not ok")}
ok
如果匹配, _*
將包括一個返回Some(null)
的提取器。
看起來你的語法錯了。 應該 (?:)。
http://docs.oracle.com/javase/tutorial/essential/regex/groups.html
以(?開頭的組是純粹的非捕獲組,不捕獲文本而不計入組總數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.