gpt4 book ai didi

regex - _ * 用法是scala模式匹配

转载 作者:行者123 更新时间:2023-12-01 02:01:04 36 4
gpt4 key购买 nike

我对下面示例中的 _ * 用法有点困惑。它的行为有所不同,我完全无法弄清楚这一点。

val p1="scala".r
val p2="([0-9]+[.]?[0-9]*|[.][0-9]+)$".r

"scala" match {case p1(_) => true case _ => false } // return false


"scala" match {case p1(_ *) => true case _ => false } // return true

"9" match {case p2(_) => true case _ => false} // return true

提前致谢。

最佳答案

match模式中至少需要一个捕获组,因为您使用的是 case(_) .这是因为“match-case”使用 unapplySeq(target: Any): Option[List[String]] ,它返回捕获组值,并且您需要 1 个捕获值与 _ 一起出现.与 _ * ,您忽略此要求。见 Scala regex reference :

To check only whether the Regex matches, ignoring any groups, use a sequence wildcard:

"2004-01-20" match {
case date(_*) => "It's a date!"
}



您的 p2包含一个捕获组,因此最后一行返回 true。

您的 p1不包含捕获组,因此第一个 match失败。第二个没有,因为您使用 * 禁用了此要求.

作为替代方案,您可以使用 case p1()用你的第一行(代表强制性第一个捕获组的 _ 在这里被删除),它也可以工作:
"scala" match {case p1() => true case _  => false }) // return true

看到这个 IDEONE demo

关于regex - _ * 用法是scala模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36324437/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com