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

32 阅读2分钟

一.matchs方法

正则表达式对象有matches方法,它的作用是验证给定的字符串是否满足正则表达式的要求。它的格式如下:

val 结果 = 正则.matches(目标字符串)

其中的结果是一个bool值。

package reg

object reg04 {
  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

    //匹配输出
    reg.findAllIn(content).foreach(println)
  }

}

二.replaceAllin正则替换

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

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

package reg

object reg04 {
  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 reg = "138".r
    // reg.findAllIn(content).foreach(println)

    // 需求:正则的典型的应用场景
    // replaceAllIn: 全替换成新字符串,我传了之后,就获得新的内容,并把新的内容保存到newContent
    // val newContent = reg.replaceAllIn(content, "这个是手机号")

    val newContent = reg.replaceAllIn(content, m => {
      // println(s"在replaceAllIn的时候,找到的内容是: ${m}")
      // m.toString
      m.toString.slice(0,3) + "****" + m.toString().substring(7)
    })

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

三.案例-手机号打码

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

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

package reg

object reg05 {
  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{2})(\d{4})(\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 java.io.FileWriter("newAddress.txt")
    fileWriter.write(newContent)
    fileWriter.close()
  }
}