Scala 的正则表达式

正则表达式的定义:

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

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 表示一个非空格
Scala 复制代码
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. 只能包含数字,大小写字母,下划线

Scala 复制代码
  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
Scala 复制代码
  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)
  }

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

Scala 复制代码
  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)
  }
相关推荐
白帽攻防录6 小时前
SRC 挖洞:PostScript 打印机驱动双 RCE,打印服务器怎么变成内网跳板
开发语言·网络安全·php·内网安全
十年Java程序媛6 小时前
Java枚举Enum完整教程|替代静态常量,开发与面试要点
java·开发语言·spring boot·后端·面试
2603_965148117 小时前
电商选品调研:通过关键词搜索API获取市场热销商品,结合商品详情API分析竞品卖点与定价
开发语言·数据库·人工智能·python·信息可视化
xixiaoyunya7 小时前
Python 异步编程入门:用 asyncio 轻松实现并发任务
开发语言·python·php
学逆向的8 小时前
C 循环结构的执行效率分析
c语言·开发语言·数据结构·网络安全
小坏讲微服务8 小时前
刚发布一个月的JDK 27,为什么我建议你立刻升级?
java·开发语言·spring boot·spring·架构·求职招聘·springboot4
打工仔折腾 AI10 小时前
用 Dashlet 把极空间 NAS 服务入口整理成统一导航首页的实践
java·开发语言·人工智能·后端·python·rpc·ai agent 实战
MATLAB代码顾问10 小时前
Simulink PI 参数扫描与批量仿真完整 MATLAB 代码
开发语言·matlab
Want59510 小时前
Python跳动的爱心②
开发语言·python·数学建模
小羊没烦恼!11 小时前
T-SQL查询进阶--理解SQL SERVER中的分区表
服务器·开发语言·前端·javascript·html