簡體   English   中英

在模式匹配時,是否可以使非捕獲組在scala正則表達式中起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM