it编程 > 编程语言 > 正则表达式

Scala中正则表达式的应用实例

16人参与 2026-03-13 正则表达式

引言

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

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

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

它主要用来干两件事:

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

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

/*
* 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

这里有两个关键点:

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

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

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

运行结果

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

找到的11位数字是:
13347589473

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

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

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

findfirstin方法,适合只需要 “第一个结果” 的场景:

// 找第一个11位数字
val firstnum = reg.findfirstin(target)
firstnum.foreach(res => println(s"第一个匹配结果:$res"))

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

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

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

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

3. 替换匹配的内容

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

// 把11位数字替换成****脱敏
val desensitized = reg.replaceallin(target, "****")
println(desensitized)  // 输出:i like 我喜欢 数****!

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

  1. 规则通用:正则语法是跨语言的,学会\d{n}\w这些基础语法,换任何语言都能用;
  2. scala 调用流程固定:定义规则(字符串 +.r)→ 调用方法(findallin/matches 等)→ 处理结果;
  3. 场景广泛:日志解析、表单校验、数据清洗…… 只要涉及字符串处理,正则都是 “偷懒神器”。

到此这篇关于scala中正则表达式的文章就介绍到这了,更多相关scala正则表达式应用内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

您想发表意见!!点此发布评论

推荐阅读

一文彻底揭秘正则表达式的基础语法与应用

03-08

Swift语言的正则表达式实践示例

03-06

正则表达式的整理与归纳(附例子)

03-06

从入门到精通Shell正则表达式实战

03-04

正则表达式中的“*”为何不是通配符示例详解

03-04

nginx负载均衡详解(轮询、权重、负载均衡)

03-02

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论