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

14 阅读2分钟
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[23234]\d".r

    reg.findAllIn(content).foreach(println)

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

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

  }

}

(三)replaceAllin正则替换

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

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

package reg

/**
 *目标:
 *  13612345678   ->  136****5678
 *任务:从一个文本文件中(自己准备一个),读出一段内容,把其中的手机号识别出来,并打码
 * address.txt
 * 湖北省 潜江市 泰丰办事处 青龙沟小区 X栋3单元 范先生 13612345678 ,13678245678
 *
 */
object reg05 {
  def main(args: Array[String]): Unit = {
    //定义一个正则表达式
    val content= scala.io.Source.fromFile("address.txt").mkString
    println("请输入进来的内容:")
    println(content)
    //写一个手机号的正则
    //使用小括号()分组
    val reg = "(1[35678]\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))
      //println()
      //"手机号:"+m
      //m的前三位+”****"+m的后四位
      m.group(1)+"***"+m.group(3)
    })
    println("替换之后的内容")
    println(newContent)
  }
}