40 正则表达式应用-手机号打码

49 阅读2分钟

一. replaceAllin正则替换

功能:对目标字符中的内容,进行正则查找,对找到的内容使用指定的内容进行替换,并返回替换之后的字符串。

格式:

正则.replaceAll(目标字符串, 匹配到的内容 => 要替换的内容 )

def main(args: Array[String]): Unit = {
  // 1. 从文本文件中读出内容
  val content = scala.io.Source.fromFile("address.txt").mkString

  println("读进来的内容是: ")
  println(content)

  // 2. 写一个手机号的正则
  val reg = "1[3568]\d{9}".r
  // val reg = "SB".r
  // 匹配输出
  // reg.findAllIn(content).foreach(println)

  // 替换:正则的典型的应用场景
  // replaceAllIn: 全部替换。
  // 在content中通过正则去找字符串,找到了之后,就换成指定的内容,并把最终的结果保存到newContent
  val newContent = reg.replaceAllIn(content, "这个有手机号")

  println("替换之后的内容是: ")
  println(newContent)
}

结果如图:

image.png

def main(args: Array[String]): Unit = {
  // 1. 从文本文件中读出内容
  val content = scala.io.Source.fromFile("address.txt").mkString

  println("读进来的内容是: ")
  println(content)

  // 2. 写一个手机号的正则
  val reg = "1[35678]\d{9}".r
 
  val newContent = reg.replaceAllIn(content, m => {
    // println(s"在replaceAllIn函数中,找到的内容是: ${mat}")
    // "手机号:" + m
    // m的前三位 + "******" + m的后四位
    m.toString().substring(0, 3) + "******" + m.toString().substring(7)
  })

  println("替换之后的内容是: ")
  println(newContent)
}

结果如图:

image.png

二. 案例-手机号打码

任务:把手机号的中间4-7位打马赛克,再输出。

用到的方法是:正则匹配分组 + replaceAllIn。

def main(args: Array[String]): Unit = {
  // 1. 从文本文件中读出内容
  val content = scala.io.Source.fromFile("address.txt").mkString

  println("读入进来的内容是:")
  println(content)

  // 2. 写一个手机号的正则
  // 使用小括号() 分组
  val reg = """([135678]\d{2})(\d{3})(\d{4})""".r
  // 匹配输出
  // reg.findAllIn(content).foreach(println)

  // 3. 替换: 正则的典型的应用场景
  // replaceAllIn,全部替换。
  // 在content中通过正则去找字符串,找到了之后,就换成指定的内容,并把最终的结果保存到newContent
  // val newContent = reg.replaceAllIn(content, "这有个手机号")

  val newContent = reg.replaceAllIn(content, m => {
    println(m.group(0)) // 当前正则匹配到完整的内容
    println(m.group(1)) // 当前正则的第一个分组(第一个小括号)匹配到的内容
    println(m.group(2))
    println(m.group(3))

    m.group(1) + "****" + m.group(3)
  })

  // 4. 把替换之后的内容,写入到一个新的文件中
  val fileWriter = new FileWriter("newAddress.txt")
  fileWriter.write(newContent)
  fileWriter.close()
}

结果如图:

image.png

image.png