正则表达式
在scala中,可以很方便地使用正则表达式来匹配数据。
定义
Regex类
- scala中提供了Regex类来定义正则表达式
- 要构造一个RegEx对象,直接使用String类的r方法即可
- 建议使用三个双引号来表示正则表达式,不然就得对正则中的反斜杠来进行转义
- 使用findAllMatchIn方法可以获取到所有正则匹配到的字符串
val regEx = """正则表达式""".r
代码示例一
object Test01 {
def main(args: Array[String]): Unit = {
//定义一个正则表达式,来匹配邮箱是否合法
val r = """.+@.+\..+""".r
//合法邮箱
val eml1 = "qq1234124@163.com"
//不合法邮箱
val eml2 = "qq12345@.com"
//获取到所有正则匹配到的字符串 如果大小大于0说明合法
println(r.findAllMatchIn(eml1).size) //1
println(r.findAllMatchIn(eml2).size) //0
}
}
代码示例二
object Test02 {
def main(args: Array[String]): Unit = {
//找出列表中不合法的邮箱
val emlList = List("38123845@qq.com", "a1da88123f@gmail.com", "zhansan@163.com", "123afadff.com")
val regex = """.+@.+\..+""".r
//找到不合法的邮箱
val list = emlList.filter(x => if (regex.findAllMatchIn(x).size < 1) true else false)
//输出不合法的邮箱
println(list)
}
}
代码示例三
object Test19 {
def main(args: Array[String]): Unit = {
// 使用括号表示一个分组
val regex = """.+@(.+)\..+""".r
val emlList =
List("38123845@qq.com", "a1da88123f@gmail.com", "zhansan@163.com", "123afadff.com")
val emlCmpList = emlList.map {
//说明 x@regex 判断 list 中的每一个值是否符合正则
//同时定义 一个 company 用来保存 @之后 .com 之前的值
//正则表达式中 .+@(.+)\..+ ||| \. 已经明确的表示匹配在.之前的内容
//因此 company 的值为 @之后 .com 之前的值
case x@regex(company) => s"${x} => ${company}"
case x => x + "=>未知"
}
//输出
println(emlCmpList)
}
}