已弃用 - Scala 正则表达式模式匹配
Deprecated - Scala Regex Pattern Matching
目前,从 Scala 2.11 开始,不鼓励在模式匹配中使用正则表达式,除非您要针对 Seq[Char] 或 Match 进行匹配,是否有替代方法。目前我已经在下面的示例中使用 Seq[Char] 策略实现了 getValueV2,尽管它很冗长而且看起来不够好。
对于替换正则表达式,您还有哪些其他建议,
trait MyHelper {
//param Regex is deprecated
def getValue(option: Option[scala.Any]): String = {
val param = """(?:String|Boolean)Option\((.*)\)""".r
option.getOrElse("") match {
case param(s) => s
case arr: Array[_] => arr.mkString("")
case _ => ""
}
}
def getValueV2(option: Option[scala.Any]): String = {
option.getOrElse("") match {
case s : String => s.toSeq match {
case p if p.endsWith(")") => p match {
case Seq('S', 't', 'r', 'i', 'n', 'g', 'O', 'p', 't', 'i', 'o', 'n', '(', suffix@_*) => suffix.toString.substring(0, suffix.length -1)
case Seq('B', 'o', 'o', 'l', 'e', 'a', 'n', 'O', 'p', 't', 'i', 'o', 'n', '(', suffix@_*) => suffix.toString.substring(0, suffix.length -1)
case _ => s
}
case _ => s
}
case arr: Array[_] => arr.mkString("")
case _ => ""
}
}
}
我一直在寻找另一个名为 kantan.regex 的图书馆,但它似乎没有很大的社区。这里最好的方法是什么,只要保持正则表达式并忽略已弃用的警告?
由于您只对匹配 String
输入感兴趣,因此在应用正则表达式之前测试类型。
def getValue(option: Option[scala.Any]): String = {
val param = """(?:String|Boolean)Option\((.*)\)""".r
option.getOrElse("") match {
case str: String => str match {
case param(s) => s
case _ => ""
}
case arr: Array[_] => arr.mkString("")
case _ => ""
}
}
编译时没有警告。
目前,从 Scala 2.11 开始,不鼓励在模式匹配中使用正则表达式,除非您要针对 Seq[Char] 或 Match 进行匹配,是否有替代方法。目前我已经在下面的示例中使用 Seq[Char] 策略实现了 getValueV2,尽管它很冗长而且看起来不够好。
对于替换正则表达式,您还有哪些其他建议,
trait MyHelper {
//param Regex is deprecated
def getValue(option: Option[scala.Any]): String = {
val param = """(?:String|Boolean)Option\((.*)\)""".r
option.getOrElse("") match {
case param(s) => s
case arr: Array[_] => arr.mkString("")
case _ => ""
}
}
def getValueV2(option: Option[scala.Any]): String = {
option.getOrElse("") match {
case s : String => s.toSeq match {
case p if p.endsWith(")") => p match {
case Seq('S', 't', 'r', 'i', 'n', 'g', 'O', 'p', 't', 'i', 'o', 'n', '(', suffix@_*) => suffix.toString.substring(0, suffix.length -1)
case Seq('B', 'o', 'o', 'l', 'e', 'a', 'n', 'O', 'p', 't', 'i', 'o', 'n', '(', suffix@_*) => suffix.toString.substring(0, suffix.length -1)
case _ => s
}
case _ => s
}
case arr: Array[_] => arr.mkString("")
case _ => ""
}
}
}
我一直在寻找另一个名为 kantan.regex 的图书馆,但它似乎没有很大的社区。这里最好的方法是什么,只要保持正则表达式并忽略已弃用的警告?
由于您只对匹配 String
输入感兴趣,因此在应用正则表达式之前测试类型。
def getValue(option: Option[scala.Any]): String = {
val param = """(?:String|Boolean)Option\((.*)\)""".r
option.getOrElse("") match {
case str: String => str match {
case param(s) => s
case _ => ""
}
case arr: Array[_] => arr.mkString("")
case _ => ""
}
}
编译时没有警告。