(三十六)正则表达式应用-手机号打码

47 阅读3分钟

(一)matchs方法

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

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

其中的结果是一个bool值。

package reg

/**
 * 目标: 手机号打码
 *      13512345678  -> 135****5678
 * 任务:从一个文本文件(自己准备一个),读出一段内容,把指中的手机号码找出来,并打码。
 *  例如:
 *      湖北省 潜江市 泰丰办事处 章华小区 X栋34单元 张先生 13512345678,18712345678
 */
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[3578]\d{8}".r
    // 匹配输出
    reg.findAllIn(content).foreach(println)
  }
}

(二)replaceAllin正则替换

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

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

代码一

package reg

/**
 * 目标: 手机号打码
 *      13512345678  -> 135******678
 * 任务:从一个文本文件(自己准备一个),读出一段内容,把指中的手机号码找出来,并打码。
 * 例如:
 *      湖北省 潜江市 泰丰办事处 章华小区 X栋34单元 张先生 13512345678,18712345678
 */
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[3578]\d{8}".r
    // 匹配输出
    // reg.findAllIn(content).foreach(println)

    // // 备注: 正则的后面也可以加
    // //replaceAllIn: 全量替换,找到之后,根据指定的内容,把匹配的结果保存到newContent
    val newContent = reg.replaceAllIn(content, "这个是手机号")

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

代码儿

package reg
object reg06 {
  def main(args: Array[String]): Unit = {
    // 1. 从文本文件中读出内容
    val content = scala.io.Source.fromFile("address.txt").mkString
    println("读入进来的内容是:")
    println(content)

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

    // 替换: 正则的典型的应用场景
    // 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)
    })

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