在模式匹配时,是否可以使非捕获组在scala正则表达式中起作用
发布时间:2020-12-16 18:59:55 所属栏目:安全 来源:网络整理
导读:据我所知,非文档中的非捕获组由(:?)定义,就像在 Java中一样. (我相信它是相同的底层库). 但是,这似乎不起作用: var R = "a(:?b)c".rR.findFirstMatchIn("abc").get.group(1) 返回“b”(当它应为空时).我怀疑这通常不是问题,但在进行模式匹配时,这意味着我
据我所知,非文档中的非捕获组由(:?)定义,就像在
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)的提取器. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |