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)
  }
相关推荐
祁同伟.35 分钟前
【C++】多态
开发语言·c++
朱嘉鼎2 小时前
C语言之可变参函数
c语言·开发语言
北冥湖畔的燕雀5 小时前
C++泛型编程(函数模板以及类模板)
开发语言·c++
QX_hao6 小时前
【Go】--map和struct数据类型
开发语言·后端·golang
你好,我叫C小白6 小时前
C语言 循环结构(1)
c语言·开发语言·算法·while·do...while
Evand J8 小时前
【MATLAB例程】基于USBL和DVL的线性回归误差补偿,对USBL和DVL导航数据进行相互补偿,提高定位精度,附代码下载链接
开发语言·matlab·线性回归·水下定位·usbl·dvl
爱喝白开水a9 小时前
LangChain 基础系列之 Prompt 工程详解:从设计原理到实战模板_langchain prompt
开发语言·数据库·人工智能·python·langchain·prompt·知识图谱
Neverfadeaway9 小时前
【C语言】深入理解函数指针数组应用(4)
c语言·开发语言·算法·回调函数·转移表·c语言实现计算器
武子康9 小时前
Java-152 深入浅出 MongoDB 索引详解 从 MongoDB B-树 到 MySQL B+树 索引机制、数据结构与应用场景的全面对比分析
java·开发语言·数据库·sql·mongodb·性能优化·nosql
杰克尼9 小时前
JavaWeb_p165部门管理
java·开发语言·前端