正則表達式
Scala支持通過Regex類的scala.util.matching封裝正則表達式。
創建一個字符串,並調用r()方法如 val pattern = "Scala".r
Scala中字符串隱式轉換爲一個RichString並調用該方法來獲得正則表達式的一個實例。
代碼實戰
package com.dt.scala.moguyun
import scala.util.matching.Regex
/**
* 正則表達式的常用用法
* Created by hlf on 2016/8/15.
*/
object HelloRegex {
def main(args: Array[String]) {
//首先要先創建一個正則表達式實例,有兩種創建方式
val regex1 = """([0-9]+) ([a-z]+)""".r
val regex2 = new Regex("""([0-9]+) ([a-z]+)""")
//常見的幾種使用方法
// regex1.findAllIn()
// regex1.findFirstIn()
// regex1.replaceAllIn()
// regex1.replaceFirstIn()
val content = "9527 scala 007 spark 0359 5718 544 kafka"
println("findFirstIn")
val r1 =regex1.findFirstIn(content)
val r2 =regex1.findFirstIn(content)
println("findFirstIn" + r1)//找到一個匹配之後就不再找了,返回的是一個Option[String]
println("findFirstIn" + r2)
println("findAllIn")
val r3 = regex1.findAllIn(content)//找到所有匹配的,返回的是一個MatchIterator
//遍歷時用for循環,不過要使用賦值的方式,將結果賦值給變量
for(regex1(num,str)<-r3) println("findAllIn" + num + ":" + str)
println("使用match")
content match {
case regex1(num,str) => println("findAllIn" + num + ":" + str)
case _ => println(" No Match")
}
//上面會顯示的是 No Match,因爲得到的是一個集合,而賦值只能是給一個賦值,所以用下面的方式纔不會報錯
"9527 scala" match {
case regex1(num,str) => println( num + ":" + str)
case _ => println(" No Match")
}
}
}
結果
findFirstIn
findFirstInSome(9527 scala)
findFirstInSome(9527 scala)
findAllIn
findAllIn9527:scala
findAllIn007:spark
findAllIn544:kafka
使用match
No Match
9527:scala
感謝[DT大數據夢工廠]首席專家Spark專家王家林老師的課程分享。更多精彩內容請掃描關注[DT大數據夢工廠]微信公衆號DT_Spark