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

Written by

in

文章目录
  • 大家好~今天来聊个通用又实用的技能:正则表达式在 Scala 中的应用。不管你是处理日志、校验手机号,还是提取字符串里的特定内容,正则都是绕不开的 “效率神器”。
  • 很多朋友觉得正则 “难学”,其实核心就一句话:正则是一套独立于编程语言的 “字符串规则语言”  —— 不管你用 Scala、Java 还是 Python,只要是写d就代表匹配数字,写{11}就代表重复 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 个高频场景:
  • 规则通用:正则语法是跨语言的,学会d、{n}、w这些基础语法,换任何语言都能用; Scala 调用流程固定:定义规则(字符串 +.r)→ 调用方法(findAllIn/matches 等)→ 处理结果; 场景广泛:日志解析、表单校验、数据清洗…… 只要涉及字符串处理,正则都是 “偷懒神器”。 到此这篇关于Scala中正则表达式的文章就介绍到这了,更多相关Scala正则表达式应用内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: Scala中正则表达式以及与模式匹配结合(多种方式) Scala的文件读写操作与正则表达式 详解Java中的scala正则表达式 scala中正则表达式的使用详解 scala正则表达式的特殊规则详解
  • 目录
    • 引言
    • 一、先搞懂:正则到底是个啥?
    • 二、实战:用 Scala 找字符串里的 11 位数字
      • 代码拆解:3 步搞定正则匹配
        • 1. 定义正则规则:val reg = "d{11}".r
        • 2. 准备目标字符串:val target = "I like 我喜欢 数13347589473!"
        • 3. 执行查找:reg.findAllIn(target).foreach(println)
      • 运行结果
      • 三、进阶:正则在 Scala 里的常用玩法
        • 1. 只找第一个匹配的内容
          • 2. 验证整个字符串是否符合规则
            • 3. 替换匹配的内容
            • 四、最后总结:正则的 “通用 + 高效”

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

              很多朋友觉得正则 “难学”,其实核心就一句话:正则是一套独立于编程语言的 “字符串规则语言”  —— 不管你用 Scala、Java 还是 Python,只要是写d就代表匹配数字,写{11}就代表重复 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)
                }
              }
              

              这里有两个关键点:

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

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

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

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

              找到的11位数字是:
              13347589473
              

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

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

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

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

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

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

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

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

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

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

              您可能感兴趣的文章:

              • Scala中正则表达式以及与模式匹配结合(多种方式)
              • Scala的文件读写操作与正则表达式
              • 详解Java中的scala正则表达式
              • scala中正则表达式的使用详解
              • scala正则表达式的特殊规则详解

              站内搜索