正则表达式的定义:
正则表达式是一种用于匹配,查找和替换文本中特定模式的字符串。
Scala
object Test43 {
def main(args: Array[String]): Unit = {
//定义一个规则 正则表达式
val reg="[123]".r
//1. 查找。在目标字符串中,找到符合正则表达式规则要求的 子串
// val rs=reg.findFirstIn("abc a")
// if(!rs.isEmpty){
// println("你找到的,符合正则表达式要求的内容是",rs.get)
// }
reg.findAllIn("1a 2bc a3d").toList.foreach(println)
}
}
//1. . 表示 除了换行之外的其他的任意单个字符
//2. \d 等于[0-9] 匹配一个数字 digit
//3. \D 除了\d 之外的其他任意字符。表示非数字
//4. \w 等价于[0-9A-Za-z_] 63个字符,表示一个字 word
//5. \W 除了\w之外的任意字符。表示非字
//6. \s 表示一个空格 space
//7. \S 表示一个非空格
Scala
object Test43 {
def main(args: Array[String]): Unit = {
// println("a\tb")
//定义一个规则 正则表达式
// val reg="[a-2A-Z0-9]".r
//val rge="^a$".r
//1. . 表示 除了换行之外的其他的任意单个字符
//2. \d 等于[0-9] 匹配一个数字 digit
//3. \D 除了\d 之外的其他任意字符。表示非数字
//4. \w 等价于[0-9A-Za-z_] 63个字符,表示一个字 word
//5. \W 除了\w之外的任意字符。表示非字
//6. \s 表示一个空格 space
//7. \S 表示一个非空格
// val reg=".".r
val reg="\\s".r
//1. 查找。在目标字符串中,找到符合正则表达式规则要求的 子串
// val rs=reg.findFirstIn("abc a")
// if(!rs.isEmpty){
// println("你找到的,符合正则表达式要求的内容是",rs.get)
// }
reg.findAllIn("_Ai 1234am a12 no, y3es, ok,").toList.foreach(println)
}
}
正则表达式的应用场景:
-
查找
-
验证
-
替换
案例一:验证用户名是否合法
规则:
-
长度在6-12之间
-
不能数字开头
-
只能包含数字,大小写字母,下划线
Scala
def main(args: Array[String]): Unit = {
val name1="1admin"
val name2="admin123"
val name3="admin"
val name4="ad_123Ab"
val name5="admin123!"
//通过正则表达式来判断
val reg="[a-zA-Z_]\\w{5,11}".r
println(reg.matches(name1))
println(reg.matches(name2))
println(reg.matches(name3))
println(reg.matches(name4))
println(reg.matches(name5))
}
案例二:
任务: 把字符串中的手机号打码:类似于:138****5678
Scala
def main(args: Array[String]): Unit = {
var str="张先生,手机号:13812345678 你买的 xxx 到了"
//开始你的代码
//138 1234 5678
// val reg="1[3-9]\\d{9}".r
// () 是分组,它不会影响正则表达式的查询结果,但是,它会把分组找到的内容单独保存在group中。
val reg="(1[3-9]\\d)(\\d{4})(\\d{4})".r
//reg.replaceAllIn的功能:在目标字符串str中,用正则表达式reg去查找,找到之后,用 箭头函数 的返回值来替换。
// m 就是正则表达式找到的内容
// 如果正则表达式中有(),则 可以通过m.group来找到对应的分组
val newStr=reg.replaceAllIn(str,(m)=>{
println(s"第一组: ${m.group(1)}")
println(s"第二组: ${m.group(2)}")
println(s"第三组: ${m.group(3)}")
println("-"*40)
m.group(1)+"****"+m.group(3)
})
println(newStr)
}
案例三:把字符串中的身份证号打码
Scala
def main(args: Array[String]): Unit = {
var str="张先生,ID: 429005200001231156"
val reg="(1[10-16]\\d)(\\d{6})(\\d[\\dX])".r
val newStr=reg.replaceAllIn(str,(m)=> m.group(1)+"--------"+m.group(3))
// println(m.group(1))
// println(m.group(2))
// println(m.group(3))
// m.group(1)+"------"+m.group(3)
println(newStr)
}