我使用this定义了一个函数,如果字符串与模式匹配则返回0,否则返回0:
def verif (s:String): Int = {
val p = """[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]) (2[0-3]|[01][0-9]):[0-5][0-9]:[0-5][0-9].[0-9]{9}""".r
s match {
case p(item) => 0
case _ => 1
}
}
执行时:
verif("2019-07-01 00:00:00.000000000") // Returns 1
答案 0 :(得分:3)
您定义了3个捕获组,因此必须与三个组进行模式匹配。但是,仅使用 non-captureing 组和类似如下的代码是有道理的:
def verif (s:String): Int = {
val p = """[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1]) (?:2[0-3]|[01][0-9]):[0-5][0-9]:[0-5][0-9]\.[0-9]{9}""".r
s match {
case p() => 0
case _ => 1
}
}
println(verif("2019-07-01 00:00:00.000000000")) // => 0
请参见Scala demo
请注意,您还需要对点进行转义以匹配文字点。