当前位置: 首页 > article >正文

Scala 的正则表达式

正则表达式的定义:

正则表达式是一种用于匹配,查找和替换文本中特定模式的字符串。

object Test43 {
  def main(args: Array[String]): Unit = {
    //定义一个规则  正则表达式
    val reg="[123]".r

    //1. 查找。在目标字符串中,找到符合正则表达式规则要求的 子串
//    val rs=reg.findFirstIn("abc a")
//    if(!rs.isEmpty){
//      println("你找到的,符合正则表达式要求的内容是",rs.get)
//    }
    reg.findAllIn("1a 2bc a3d").toList.foreach(println)
  }
}

//1. . 表示 除了换行之外的其他的任意单个字符
//2. \d 等于[0-9] 匹配一个数字 digit
//3. \D 除了\d 之外的其他任意字符。表示非数字
//4. \w 等价于[0-9A-Za-z_] 63个字符,表示一个字 word
//5. \W 除了\w之外的任意字符。表示非字
//6. \s 表示一个空格 space
//7. \S 表示一个非空格
object Test43 {
  def main(args: Array[String]): Unit = {
//    println("a\tb")
    //定义一个规则  正则表达式
//    val reg="[a-2A-Z0-9]".r
    //val rge="^a$".r
    //1. . 表示 除了换行之外的其他的任意单个字符
    //2. \d 等于[0-9] 匹配一个数字 digit
    //3. \D 除了\d 之外的其他任意字符。表示非数字
    //4. \w 等价于[0-9A-Za-z_] 63个字符,表示一个字 word
    //5. \W 除了\w之外的任意字符。表示非字
    //6. \s 表示一个空格 space
    //7. \S 表示一个非空格
//    val reg=".".r
    val reg="\\s".r

    //1. 查找。在目标字符串中,找到符合正则表达式规则要求的 子串
//    val rs=reg.findFirstIn("abc a")
//    if(!rs.isEmpty){
//      println("你找到的,符合正则表达式要求的内容是",rs.get)
//    }
    reg.findAllIn("_Ai 1234am a12 no, y3es, ok,").toList.foreach(println)
  }
}

正则表达式的应用场景:

1. 查找

2. 验证

3. 替换

案例一:验证用户名是否合法

规则:

1. 长度在6-12之间

2. 不能数字开头

3. 只能包含数字,大小写字母,下划线

  def main(args: Array[String]): Unit = {
    val name1="1admin"
    val name2="admin123"
    val name3="admin"
    val name4="ad_123Ab"
    val name5="admin123!"

    //通过正则表达式来判断
    val reg="[a-zA-Z_]\\w{5,11}".r
    println(reg.matches(name1))
    println(reg.matches(name2))
    println(reg.matches(name3))
    println(reg.matches(name4))
    println(reg.matches(name5))
  }

案例二:

任务: 把字符串中的手机号打码:类似于:138****5678
  def main(args: Array[String]): Unit = {
    var str="张先生,手机号:13812345678    你买的 xxx 到了"
    //开始你的代码
    //138   1234    5678

//    val reg="1[3-9]\\d{9}".r
    // () 是分组,它不会影响正则表达式的查询结果,但是,它会把分组找到的内容单独保存在group中。
    val reg="(1[3-9]\\d)(\\d{4})(\\d{4})".r
    //reg.replaceAllIn的功能:在目标字符串str中,用正则表达式reg去查找,找到之后,用 箭头函数 的返回值来替换。

    // m 就是正则表达式找到的内容
    // 如果正则表达式中有(),则 可以通过m.group来找到对应的分组
    val newStr=reg.replaceAllIn(str,(m)=>{
      println(s"第一组: ${m.group(1)}")
      println(s"第二组: ${m.group(2)}")
      println(s"第三组: ${m.group(3)}")
      println("-"*40)
      m.group(1)+"****"+m.group(3)
    })
    println(newStr)
  }

案例三:把字符串中的身份证号打码

  def main(args: Array[String]): Unit = {
    var str="张先生,ID: 429005200001231156"
    val reg="(1[10-16]\\d)(\\d{6})(\\d[\\dX])".r
    val newStr=reg.replaceAllIn(str,(m)=> m.group(1)+"--------"+m.group(3))
//      println(m.group(1))
//      println(m.group(2))
//      println(m.group(3))
//      m.group(1)+"------"+m.group(3)
    println(newStr)
  }


http://www.kler.cn/a/429894.html

相关文章:

  • Unity Burst详解
  • ubuntu22.04 gcc,g++从10.5切换到低版本9.5
  • HarmonyOS鸿蒙开发 弹窗及加载中指示器HUD功能实现
  • 在 Vue 3 中实现点击按钮后禁止浏览器前进或后退
  • 4.STM32通信接口之SPI通信(含源码)---硬件SPI与W25Q64存储模块通信实战《精讲》
  • 【网络篇】TCP知识
  • 嵌入式驱动开发详解13(IIC驱动架构实现)
  • 掌握小程序地理位置服务插件,让用户体验再升级
  • 搭建Node.js后端
  • EasyExcel改名为FastExce做了那些改变呢
  • 【深度学习】深入解析卷积神经网络(CNNs)
  • 【语音识别】搭建本地的语音转文字系统:FunASR(离线不联网即可使用)
  • Kubernetes(K8s)
  • 从爱尔兰歌曲到莎士比亚:LSTM文本生成模型的优化之旅
  • Github 2024-12-06Java开源项目日报Top10
  • C#实现的ACCESS的增删改查基本功能
  • SVN Update 报错解决三部曲
  • CV(3)--噪声滤波和特征
  • 大数据-245 离线数仓 - 电商分析 缓慢变化维 与 拉链表 SCD Slowly Changing Dimensions
  • 项目中使用AntV L7地图(五)添加飞线
  • Linux驱动开发(12):中断子系统–按键中断实验
  • 超标量处理器设计笔记(5)虚拟存储器、地址转换、page fault
  • LeetCode:459.重复的子字符串