Scala正则表达式

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

使用方式:①定义一个正则

正则表达式应用场景:查找、验证、替换。

Ⅰ、查找

在目标字符串中,找到符合正则表达式规则要求的 子串。

方括号:

Scala 复制代码
package test36

object test {
  def main(args: Array[String]): Unit = {
    val reg="[abc]".r
//    val rs=reg.findFirstIn("abc a")
//    if (!rs.isEmpty){
//      println("你找到的,符合正则表达式要求的内容是",rs.get)
//    }
    reg.findAllIn("abc abc").toList.foreach(println)
  }
}

|-----|---------------------------------|
| . | 表示除了换行之外的其他的任意单个字符 |
| \d | 等于【0-9】匹配一个数字 digit |
| \D | 除了\d之外的其他的任意字符。表示非数字 |
| \w | 等价于【0-9A-Za-z_】63个字符,表示一个字 word |
| \W | 除了\w之外的任意字符。表示非字 |
| \s | 表示一个空格 space |
| \S | 表示一个非空格 |

Scala 复制代码
package test36
object test {
  def main(args: Array[String]): Unit = {
//    val reg="[abc]".r
//    val reg="a$".r
//    val reg=".".r
//val reg="\\d\\d\\d".r
//val reg="\\D".r
//    val reg="\\w".r
//    val reg="\\W".r
//    val reg="\\s".r
    val reg="\\S".r
//    val rs=reg.findFirstIn("abc a")
//    if (!rs.isEmpty){
//      println("你找到的,符合正则表达式要求的内容是",rs.get)
//    }
    reg.findAllIn("_Ai 1234am a12 no studengt, ok,y3es,no,ok").toList.foreach(println)
  }
}

Ⅱ、量词

|-------------|-------------------|
| {n,m} | 把前面的字符匹配最少n次,最多m次 |
| {n, } | 把前面的字符匹配最少n次,最多不限 |
| {n} | 把前面的字符匹配n次 |
| ?===>{0,1} | 把前面的字符匹配0次或者1次 |
| +===>{1, } | 把前面的字符匹配最少1次 |
| *===>{0,} | 把前面的字符匹配0次。或者多次 |
[量词查找]

Scala 复制代码
    package test36

object test {
  def main(args: Array[String]): Unit = {
//规则1.有11个数字
    //规则2:开头是1
    //规则3:第二位是3-9的数字
    var reg="1[3-9]\\d{9}".r
    reg.findAllIn("01234567890 13a12345678 13812345678 and 10987654321 are phone numbers").toList.foreach(println)
  }
}

练习一:验证合法的用户名

Scala 复制代码
package test37
//验证用户名是否合法
//规则
//2.不能数字开头
//3.只能包含数字,大小写字母,下划线
object test {
  def main(args: Array[String]): Unit = {
    val name1="1shenxinghui"//不合法,是数字开头的。
    val name2="lishen123"//合法
    val name3="qy"//不合法,长度不够
    val name4="xyz_123Ai"//合法
    val name5="waqc1314!"//不合法,!是不允许的
    //通过正则表达式来判断
    val reg="[a-zA-Z_]\\w{6,12}".r
    println(reg.matches(name1))//matches对字符串做验证,返回boolean值
    println(reg.matches(name2))//matches对字符串做验证,返回boolean值
    println(reg.matches(name3))//matches对字符串做验证,返回boolean值
    println(reg.matches(name4))//matches对字符串做验证,返回boolean值
    println(reg.matches(name5))//matches对字符串做验证,返回boolean值
  }
}

练习二:隐藏手机号中间4位

Scala 复制代码
package test37
//任务:把字符串中的手机号打码:类似:138****5678

object test2 {
  def main(args: Array[String]): Unit = {
   var str="沈星回,手机号:13812345678 13612345454 寝室号:1234-01 你买的xxx到了"
    //开始你的代码
    //()是分组,它不会影响正则表达式的查询结果,但是,它会把分组找到的内容单独保存在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)
  }
}
相关推荐
玉宇夕落3 分钟前
背单词项目一:融会贯通:从零构建"单词大师"后台——Next.js + Supabase + Drizzle 全栈开发实战
后端
quantdash_cc7 分钟前
量化数据源怎么选:稳定性、实时性和数据完整性到底该如何权衡?
开发语言·python·数据分析·量化交易·股票数据·quantdash
橙序员小站10 分钟前
从 Demo 到生产:Agent Harness 如何把 AI 真正“接”进项目
后端·aigc·ai编程
萧瑟余晖16 分钟前
Java深入解析篇五十四之对象模型详解
java·开发语言
她的男孩25 分钟前
一个开源低代码框架的协作 SPI 是怎么设计的 ForgeAdmin 拆解 + 实战接入新平台
后端·算法·架构
蓝山61626 分钟前
Python 字典(Dictionary)完全指南:从入门到实战
后端
foggyprojects33 分钟前
在 DeepSeek Harness 里跑通 Foggy:从安装插件到第一次问数
后端
张文是假的啊34 分钟前
Java | record | Controller逻辑
java·开发语言
不甘先生1 小时前
Go 中 type、方法与指针接收者:从 str_name.Name() 看懂 Go 的类型系统
开发语言·后端·golang
quantdash_cc2 小时前
Python 股票 K 线数据质量校验:字段、缺失值、重复行和价格异常
开发语言·python·数据分析·量化交易·股票数据·quantdash