正则表达式
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