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

1. matchces函数的使用方法

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

val 结果 = 正则.matches(目标字符串) 其中的结果是一个bool值。

【例】

scala 复制代码
import scala.util.matching.Regex

object RegexDemo {

    def main(args: Array[String]) {

        val reg1 = "\\d{3}".r

        println(reg1.matches("123")) // true

        println(reg1.matches("12a")) // false

    }

}

2. replaceAllIn的使用方法

(三)replaceAllin正则替换

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

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

【示例】:把目标字符串中的字符BC换成01。

("bc".r).replaceAll("abcdabcd" => m => "01" )

案例-手机号打码

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

案例文件如下

scala 复制代码
package reg

import java.io.FileWriter

object reg04 {
  def main(args: Array[String]): Unit = {
    // 1.从根目录下读出address,txt 的内容
    val content = scala.io.Source.fromFile("address.txt").mkString

    println("读到的文件内容如下:")
    println(content)
    // 2. 找到其中的合法手机号,把中间4位(3-4-4)用*代替
    val reg = "1[031902]\d{9}".r

//    println("找到的合法手机号如下:")
//    reg.findAllIn(content).foreach(ele=>println(ele))

    // 在content中,把所有通过正则找到的内容,换成"abc"
//    reg.replaceAllIn(content, ele => "abc")
    val newContent = reg.replaceAllIn(content,ele =>{
      val phone = ele.toString()
      println(ele)
      "abc"
//      "手机号前3位" +"****"+ "手机号后四位"
      phone.substring(0 ,3) + "****" + phone.substring(7)
    })
    println("替换后的内容如下:")
    println(newContent)

    // 3.把结果写入到address_new.txt文件中
    val fileWriter = new FileWriter("address_new.txt")
    fileWriter.write(newContent)
    fileWriter.close()
  }

}
以下为添加了group版:
scala 复制代码
package reg

import java.io.FileWriter

object reg06 {
  def main(args: Array[String]): Unit = {
    // 1.从根目录下读出address,txt 的内容
    val content = scala.io.Source.fromFile("address.txt").mkString

    println("读到的文件内容如下:")
    println(content)
    // 2. 找到其中的合法手机号,把中间4位(3-4-4)用*代替
    val reg = "(1[031902]\d\d)(\d{4})(\d{3})".r

//    println("找到的合法手机号如下:")
//    reg.findAllIn(content).foreach(ele=>println(ele))

    // 在content中,把所有通过正则找到的内容,换成"abc"
//    reg.replaceAllIn(content, ele => "abc")
    val newContent = reg.replaceAllIn(content,ele =>{
      println(ele.group(0))
      println(ele.group(1))
      println(ele.group(2))
      println(ele.group(3))

//      val phone = ele.toString()
//      println(ele)
//      "abc"
//      "手机号前3位" +"****"+ "手机号后四位"
//      phone.substring(0 ,3) + "****" + phone.substring(7)
      ele.group(1) + "-****-" + ele.group(3)
    })
    println("替换后的内容如下:")
    println(newContent)

    // 3.把结果写入到address_new.txt文件中
    val fileWriter = new FileWriter("address_new.txt")
    fileWriter.write(newContent)
    fileWriter.close()
  }
}
注:

():是分组

println(ele.group(0/1/2/3...))固定表示匹配到的全部内容

括号里的数字(1,2,3)顺序对应着正则表达式中,()包含的内容

这里的group是分组的意思,它与正则表达式中的()是一一对应的。

3. 正则表达式的应用

以下是把文件中的内容换成'abc'
scala 复制代码
package reg

import java.io.FileWriter

object reg05 {
  def main(args: Array[String]): Unit = {
    // 1.从根目录下读出address,txt 的内容
    val content = scala.io.Source.fromFile("address.txt").mkString

    println("读到的文件内容如下:")
    println(content)
    // 2. 找到其中的合法手机号,把中间4位(3-4-4)用*代替
    val reg = "1[031902]\d{9}".r

//    println("找到的合法手机号如下:")
//    reg.findAllIn(content).foreach(ele=>println(ele))

    // 在content中,把所有通过正则找到的内容,换成"abc"
    reg.replaceAllIn(content, ele => "abc")
    val newContent = reg.replaceAllIn(content,ele =>{
      println(ele)
     "abc"
//      "手机号前3位" +"****"+ "手机号后四位"
    })
    println("替换后的内容如下:")
    println(newContent)

    // 3.把结果写入到address_new.txt文件中
  }

}
相关推荐
hopsky3 天前
《Scala 学习手册》核心内容详解
人工智能·学习·scala
abcy07121314 天前
scala playframework 搭建与新建controller教程
scala
lpfasd12314 天前
编程语言榜单变迁分析
开发语言·后端·scala
戮漠summer1 个月前
Missing Semester 计算机教育中缺失的一课 Lecture 01 Shell
开发语言·后端·scala
醉熏的石头1 个月前
Ubuntu 中的编程语言(中)
linux·ubuntu·scala
Irene19911 个月前
Scala、Java、Python、JavaScript 的核心特性和应用场景(Python 的“单机“局限性:GIL 机制导致的多核并行缺陷)
java·javascript·python·scala
李白的天不白2 个月前
确认 Nginx 配置文件是否真的生效
scala
醉颜凉2 个月前
Scala自定义Monad实战:从理论到应用的完整指南
大数据·算法·scala
那晚的她2 个月前
Scala中Set集合
开发语言·后端·scala
IvanCodes2 个月前
二、Scala流程控制:分支与循环
大数据·scala