簡體   English   中英

不推薦使用-Scala Regex模式匹配

[英]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輸入感興趣,因此在應用Regex之前先測試類型。

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 _ => ""
  }
}

編譯時沒有警告。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM