正则表达式在 Scala 中的应用

大家好~今天来聊个通用又实用的技能:正则表达式在 Scala 中的应用。不管你是处理日志、校验手机号,还是提取字符串里的特定内容,正则都是绕不开的 "效率神器"。

一、先搞懂:正则到底是个啥?

很多朋友觉得正则 "难学",其实核心就一句话:正则是一套独立于编程语言的 "字符串规则语言" ------ 不管你用 Scala、Java 还是 Python,只要是写\d就代表匹配数字,写{11}就代表重复 11 次,规则是通用的。

它主要用来干两件事:

  • 查找:从大字符串里揪出符合规则的子串(比如从一段文字里找手机号)
  • 匹配:验证整个字符串是否符合规则(比如检查输入的是不是合法手机号)

二、实战:用 Scala 找字符串里的 11 位数字

直接上代码(这是我写的一个 "提取 11 位数字" 的示例),咱们边看边拆:

scala 复制代码
/*
* 1、处理字符串
* 2、查找:在大字符串里找符合规则的子串
* 3、匹配:验证字符串是否满足规则
* 划重点:正则是通用技术,和编程语言无关!
*/

object reg01 {
  def main(args: Array[String]): Unit = {
    // 1. 定义正则规则:匹配11位连续数字
    val reg = "\d{11}".r  
    
    // 2. 准备要处理的目标字符串
    val target = "I like 我喜欢 数13347589473!"
    
    // 3. 查找并输出结果
    println("找到的11位数字是:")
    reg.findAllIn(target).foreach(println)
  }
}

代码拆解:3 步搞定正则匹配

1. 定义正则规则:val reg = "\d{11}".r

这里有两个关键点:

  • \d{11}:这是正则语法 ------\d代表 "一个数字"(Scala 里要写两个反斜杠\做转义),{11}代表 "连续出现 11 次",合起来就是 "匹配 11 位连续数字";
  • .r:这是 Scala 的 "小魔法"------ 把普通字符串转成Regex对象,只有转成这个对象,才能调用正则的专属方法。

2. 准备目标字符串:val target = "I like 我喜欢 数13347589473!"

就是咱们要处理的原始内容,里面混了英文、中文和数字,我们要把 11 位的数字 "揪" 出来。

3. 执行查找:reg.findAllIn(target).foreach(println)

  • findAllIn(target)Regex对象的核心方法,作用是把目标字符串里所有符合规则的子串都找出来,返回一个可迭代的集合;
  • foreach(println):遍历集合,把找到的结果打印出来。

运行结果

执行代码后,控制台会直接输出:

复制代码
找到的11位数字是:
13347589473

三、进阶:正则在 Scala 里的常用玩法

光 "查找" 还不够,正则还有很多实用操作,这里补充 3 个高频场景:

1. 只找第一个匹配的内容

findFirstIn方法,适合只需要 "第一个结果" 的场景:

scala 复制代码
// 找第一个11位数字
val firstNum = reg.findFirstIn(target)
firstNum.foreach(res => println(s"第一个匹配结果:$res"))

输出:第一个匹配结果:13347589473

2. 验证整个字符串是否符合规则

matches方法,比如验证 "输入的是不是纯 11 位数字":

scala 复制代码
val phone1 = "13347589473"  // 合法
val phone2 = "13347589473abc"  // 不合法
println(phone1.matches("\d{11}"))  // 输出:true
println(phone2.matches("\d{11}"))  // 输出:false

3. 替换匹配的内容

replaceAllIn方法,把找到的内容替换成其他字符:

scala 复制代码
// 把11位数字替换成****脱敏
val desensitized = reg.replaceAllIn(target, "****")
println(desensitized)  // 输出:I like 我喜欢 数****!

四、最后总结:正则的 "通用 + 高效"

  1. 规则通用 :正则语法是跨语言的,学会\d{n}\w这些基础语法,换任何语言都能用;
  2. Scala 调用流程固定:定义规则(字符串 +.r)→ 调用方法(findAllIn/matches 等)→ 处理结果;
  3. 场景广泛:日志解析、表单校验、数据清洗...... 只要涉及字符串处理,正则都是 "偷懒神器"。
相关推荐
hopsky9 天前
《Scala 学习手册》核心内容详解
人工智能·学习·scala
abcy07121319 天前
scala playframework 搭建与新建controller教程
scala
lpfasd12319 天前
编程语言榜单变迁分析
开发语言·后端·scala
戮漠summer1 个月前
Missing Semester 计算机教育中缺失的一课 Lecture 01 Shell
开发语言·后端·scala
醉熏的石头2 个月前
Ubuntu 中的编程语言(中)
linux·ubuntu·scala
Irene19912 个月前
Scala、Java、Python、JavaScript 的核心特性和应用场景(Python 的“单机“局限性:GIL 机制导致的多核并行缺陷)
java·javascript·python·scala
李白的天不白2 个月前
确认 Nginx 配置文件是否真的生效
scala
醉颜凉3 个月前
Scala自定义Monad实战:从理论到应用的完整指南
大数据·算法·scala
那晚的她3 个月前
Scala中Set集合
开发语言·后端·scala
IvanCodes3 个月前
二、Scala流程控制:分支与循环
大数据·scala