Regex _*用法是scala模式匹配
我对下面例子中的*用法有点困惑。它的行为不同,我完全无法理解这一点Regex _*用法是scala模式匹配,regex,scala,Regex,Scala,我对下面例子中的*用法有点困惑。它的行为不同,我完全无法理解这一点 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
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
提前感谢。匹配的
模式中至少需要一个捕获组,因为您使用的是case(41;
。这是因为“匹配案例”使用了unplyseq(target:Any):选项[List[String]]
,该选项返回捕获组值,并且您需要1个捕获值与\uu
一起出现。使用。*
,您可以忽略此要求。见:
要仅检查正则表达式是否匹配,忽略任何组,请使用序列通配符:
“2004-01-20”匹配{
案例日期(*)=>“这是一个日期!”
}
您的p2
包含一个捕获组,因此最后一行返回true
您的p1
不包含捕获组,因此第一个匹配失败。第二个没有,因为您使用*
禁用了此要求
作为替代方案,您可以在第一行中使用case p1()
(表示强制第一个捕获组的
在这里被删除),它也可以工作:
"scala" match {case p1() => true case _ => false }) // return true
请参见此匹配
模式中需要捕获组。使用.*
,您可以忽略此要求。我已经更新了答案,并提供了更多解释和IDEONE的示例演示。incr 1-以前从未听说过它。@WiktorStribiżew非常感谢您