Scala Pattern Match之Regular Expressions

Scala Pattern Match之Regular Expressions

Scala正则表达式,如下是正则表达式的定义和使用,

scala> val regex="""([0-9]+)([a-z]+)""".r
regex: scala.util.matching.Regex = ([0-9]+)([a-z]+)

scala> val str = "1618lyx"
str: String = 1618lyx

scala> val regex(num,name) = str
num: String = 1618
name: String = lyx

将匹配的结果赋值给num 和 name。

在构造Regex的时候使用到String类的r方法,我们也可以直接使用Regex类进行:

scala> import scala.util.matching._
import scala.util.matching._

scala> 

scala> val regex = new Regex("""([0-9]+)([a-z]+)""")
regex: scala.util.matching.Regex = ([0-9]+)([a-z]+)

scala> val regex(num, blog) = str
num: String = 1618
blog: String = lyx

scala>

下面来看一下正则表达式在模式匹配中的应用,

//r 方法表示创建一个正则表达式
val BookExtractorRE =
  """Book:title=([^,]+),\s+author=(.+)""".r

val MagazineExtractorRE = """Magazine:title=([^,]+),\s+issue=(.+)""".r

val catalog = Seq(
  "Book:title=Programming Scala Second Edition,author=Dean Wampler",
  "Magazine:title=The New York,issue=January 2014",
  "Unknown:text=who put this here?"
)

/**
  * BookExtractorRE 是一个正则表达式,可以将匹配的字符串赋值给title,author
  * 在case部分就可以取到匹配到的变量
  * entry :表示没有匹配的变量
  *
  * 对于大量转义字符及换行的字符串可以使用三个双引号
  * 三个双引号的字符串可以将换行符输出
  */
for (item <- catalog) {
  item match {
    case BookExtractorRE(title, author) => println(
      s"""Book $title,
         written by $author""")
    case MagazineExtractorRE(title, issue) => println(s"""Magazine "title" ,issue $issue""")
    case entry => println(s"Unrecognized entry:$entry")

  }
}

==========END==========

你可能感兴趣的:(Scala Pattern Match之Regular Expressions)