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==========