正则表达式实现手机号打码与脱敏处理方法
时间:2026-08-14 | 作者:火苗实验室 | 阅读:01.matchces函数的使用方法
(一)matchs方法正则表达式对象里有一个matches方法,主要就是用来判断:给定的字符串,究竟是否符合这条正则表达式设定的规则。它的基本格式如下:
val 结果 = 正则.matches(目标字符串)其中的结果是一个bool值。
【例】:
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。
案例文件如下:
package reg
import ja va.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版:package reg
import ja va.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]dd)(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’:package reg
import ja va.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文件中
}
}
免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。
相关文章
更多-
- 迅捷路由器怎么调信号最强,设置时要注意什么?
- 时间:2026-08-27
-
- vivo浏览器怎么卸不掉?原因和解决方法在这里
- 时间:2026-08-27
-
- OPPO R11s黑屏了,怎么强制恢复出厂设置?
- 时间:2026-08-27
-
- 飞利浦显示器包装盒有生产日期和保修期吗?怎么看?
- 时间:2026-08-27
-
- 联想新平板开机必须联网吗?怎么做?
- 时间:2026-08-27
-
- 平板横竖屏切换设置与问题解决
- 时间:2026-08-27
-
- 移动电源容量怎么测?要准备哪些工具?
- 时间:2026-08-27
-
- 荣耀90 Pro防水吗?防水级别多少?怎么用才安全
- 时间:2026-08-27
精选合集
更多大家都在玩
大家都在看
更多-
- 糖尿病完全不能吃糖吗
- 时间:2026-09-15
-
- 蚂蚁庄园小课堂2026年9月16日最新题目答案
- 时间:2026-09-15
-
- 小鸡答题今天的答案是什么2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园每日答题答案2026年9月16日
- 时间:2026-09-15
-
- 以下哪种粮食是酿造绍兴黄酒的主要原料 蚂蚁庄园今日答案9月16日
- 时间:2026-09-15
-
- 劝学名句“及时当勉励,岁月不待人”出自哪位诗人 蚂蚁庄园今日答案9.16
- 时间:2026-09-15
-
- 蚂蚁庄园今天答题答案2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园答题今日答案2026年9月16日
- 时间:2026-09-15



