scala正则表达式的特殊规则详解

作者:

文章目录
  • 在 Scala 中,正则表达式通常使用scala.util.matching.Regex类来表示。可以通过r方法将一个字符串字面量转换为正则表达式。例如,val pattern = "abc".r,这里pattern就是一个正则表达式对象,它可以用于匹配包含abc的字符串。 当正则表达式中包含一些在 Scala 字符串中有特殊含义的字符(如反斜杠)时,需要进行转义。例如,如果要匹配一个反斜杠字符,在正则表达式中应该写成"\",在 Scala 代码中创建正则表达式对象时就应该是val backslashPattern = "\\".r。这是因为在 Scala 字符串中,一个反斜杠本身需要用另一个反斜杠来转义,然后在正则表达式中,反斜杠也有特殊用途(比如用于表示字符类等),所以总共需要两个反斜杠。
  • 可以使用方括号[]来定义字符类。例如,[abc]可以匹配字符a、b或者c。在 Scala 中,val charClassPattern = "[abc]".r可以用来创建匹配a、b或c的正则表达式对象。 可以使用范围表示法,如[a – z]来匹配小写字母a到z之间的所有字符。在 Scala 代码中可以写成val lowerCasePattern = "[a – z]".r。 否定字符类可以通过在方括号内的第一个字符使用^来实现。例如,[^abc]将匹配除了a、b和c之外的任何字符。对应的 Scala 代码是val notABCPattern = "[^abc]".r。
  • *量词表示匹配前面的元素零次或多次。例如,a*可以匹配空字符串、a、aa、aaa等。在 Scala 中,val starPattern = "a*".r可以用来匹配包含零个或多个a的字符串。 +量词表示匹配前面的元素一次或多次。比如a+将匹配a、aa、aaa等,但不匹配空字符串。Scala 代码可以写成val plusPattern = "a+".r。 ?量词表示匹配前面的元素零次或一次。例如a?可以匹配空字符串或者a。在 Scala 中是val questionMarkPattern = "a?".r。 可以使用{n}来指定前面元素的精确匹配次数,其中n是一个整数。例如,a{3}将匹配aaa。Scala 代码为val exactCountPattern = "a{3}".r。 {n,}表示匹配前面的元素至少n次。例如,a{2,}将匹配aa、aaa、aaaa等。在 Scala 中可以写成val atLeastCountPattern = "a{2,}".r。 {n,m}表示匹配前面的元素至少n次但不超过m次。例如,a{1,3}将匹配a、aa、aaa。对应的 Scala 代码是val rangeCountPattern = "a{1,3}".r。
  • 可以使用圆括号()来进行分组。分组可以用于提取匹配的子串,也可以用于应用量词到一组字符上。例如,(ab)+将匹配ab、abab、ababab等。在 Scala 中,val groupPattern = "(ab)+".r可以用来创建这样的正则表达式对象。 当进行匹配后,可以通过match语句或者findFirstMatchIn等方法来获取匹配的组。
  • ^用于匹配字符串的开头。例如,^abc将只匹配以abc开头的字符串。在 Scala 中,val startPattern = "^abc".r可以用于此目的。 $用于匹配字符串的结尾。例如,abc$将只匹配以abc结尾的字符串。Scala 代码可以是val endPattern = "abc$".r。 b用于匹配单词边界。单词边界是指单词字符(字母、数字、下划线)和非单词字符之间的位置。例如,babcb将匹配独立的abc单词,而不是作为其他单词一部分的abc。在 Scala 中,val wordBoundaryPattern = "\babc\b".r可以用来匹配这样的边界情况。
  • 正则表达式中的一些字符有特殊含义,如^(在字符类外表示字符串开头)、$(表示字符串结尾)、*(量词)等。如果要匹配这些字符本身,需要进行转义。在 Scala 中,转义字符也是反斜杠。例如,要匹配一个*字符,正则表达式应该是*,在 Scala 代码中创建正则表达式对象时就是val asteriskPattern = "\*".r。
  • 在 Scala 的模式匹配中使用正则表达式时,有一些方便的语法。例如,可以在match语句中直接使用正则表达式来匹配字符串。 package test37 //任务:把字符串中的手机号打码:类似:138****5678 object test2 { def main(args: Array[String]): Unit = { var str= “张先生,手机号:13812345678 你买的 xxx 到了” //开始你的代码 // 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(“-“*48) m.group(1)+”****”+m.group(3) }) println(newStr) //“张先生,手机号:13812345678 你买的 xxx 到了” //var str = “张先生,ID:429005200001231156” //var str = “张先生,ID:4290052000——56” } }
  • 到此这篇关于scala正则表达式的特殊规则的文章就介绍到这了,更多相关scala正则表达式特殊规则内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: Scala中正则表达式以及与模式匹配结合(多种方式) Scala的文件读写操作与正则表达式 详解Java中的scala正则表达式 scala中正则表达式的使用详解
  • 目录
    • 字面量规则
    • 字符类规则
    • 量词规则
    • 分组规则
    • 边界匹配规则
    • 特殊字符转义规则
    • 模式匹配中的特殊规则
    • 总结 

    • 在 Scala 中,正则表达式通常使用scala.util.matching.Regex类来表示。可以通过r方法将一个字符串字面量转换为正则表达式。例如,val pattern = "abc".r,这里pattern就是一个正则表达式对象,它可以用于匹配包含abc的字符串。
    • 当正则表达式中包含一些在 Scala 字符串中有特殊含义的字符(如反斜杠)时,需要进行转义。例如,如果要匹配一个反斜杠字符,在正则表达式中应该写成"\",在 Scala 代码中创建正则表达式对象时就应该是val backslashPattern = "\\".r。这是因为在 Scala 字符串中,一个反斜杠本身需要用另一个反斜杠来转义,然后在正则表达式中,反斜杠也有特殊用途(比如用于表示字符类等),所以总共需要两个反斜杠。

    • 可以使用方括号[]来定义字符类。例如,[abc]可以匹配字符ab或者c。在 Scala 中,val charClassPattern = "[abc]".r可以用来创建匹配abc的正则表达式对象。
    • 可以使用范围表示法,如[a - z]来匹配小写字母az之间的所有字符。在 Scala 代码中可以写成val lowerCasePattern = "[a - z]".r
    • 否定字符类可以通过在方括号内的第一个字符使用^来实现。例如,[^abc]将匹配除了abc之外的任何字符。对应的 Scala 代码是val notABCPattern = "[^abc]".r

    • *量词表示匹配前面的元素零次或多次。例如,a*可以匹配空字符串、aaaaaa等。在 Scala 中,val starPattern = "a*".r可以用来匹配包含零个或多个a的字符串。
    • +量词表示匹配前面的元素一次或多次。比如a+将匹配aaaaaa等,但不匹配空字符串。Scala 代码可以写成val plusPattern = "a+".r
    • ?量词表示匹配前面的元素零次或一次。例如a?可以匹配空字符串或者a。在 Scala 中是val questionMarkPattern = "a?".r
    • 可以使用{n}来指定前面元素的精确匹配次数,其中n是一个整数。例如,a{3}将匹配aaa。Scala 代码为val exactCountPattern = "a{3}".r
    • {n,}表示匹配前面的元素至少n次。例如,a{2,}将匹配aaaaaaaaa等。在 Scala 中可以写成val atLeastCountPattern = "a{2,}".r
    • {n,m}表示匹配前面的元素至少n次但不超过m次。例如,a{1,3}将匹配aaaaaa。对应的 Scala 代码是val rangeCountPattern = "a{1,3}".r

    • 可以使用圆括号()来进行分组。分组可以用于提取匹配的子串,也可以用于应用量词到一组字符上。例如,(ab)+将匹配abababababab等。在 Scala 中,val groupPattern = "(ab)+".r可以用来创建这样的正则表达式对象。
    • 当进行匹配后,可以通过match语句或者findFirstMatchIn等方法来获取匹配的组。

    • ^用于匹配字符串的开头。例如,^abc将只匹配以abc开头的字符串。在 Scala 中,val startPattern = "^abc".r可以用于此目的。
    • $用于匹配字符串的结尾。例如,abc$将只匹配以abc结尾的字符串。Scala 代码可以是val endPattern = "abc$".r
    • b用于匹配单词边界。单词边界是指单词字符(字母、数字、下划线)和非单词字符之间的位置。例如,babcb将匹配独立的abc单词,而不是作为其他单词一部分的abc。在 Scala 中,val wordBoundaryPattern = "\babc\b".r可以用来匹配这样的边界情况。

    • 正则表达式中的一些字符有特殊含义,如^(在字符类外表示字符串开头)、$(表示字符串结尾)、*(量词)等。如果要匹配这些字符本身,需要进行转义。在 Scala 中,转义字符也是反斜杠。例如,要匹配一个*字符,正则表达式应该是*,在 Scala 代码中创建正则表达式对象时就是val asteriskPattern = "\*".r

    • 在 Scala 的模式匹配中使用正则表达式时,有一些方便的语法。例如,可以在match语句中直接使用正则表达式来匹配字符串。
    • package test37
      //任务:把字符串中的手机号打码:类似:138****5678
      object test2 {
        def main(args: Array[String]): Unit = {
          var str= "张先生,手机号:13812345678  你买的 xxx 到了"
          //开始你的代码
      //    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("-"*48)
            m.group(1)+"****"+m.group(3)
          })
          println(newStr)
          //“张先生,手机号:13812345678  你买的 xxx 到了”
      
          //var str = "张先生,ID:429005200001231156"
          //var str = "张先生,ID:4290052000------56"
        }
      
      }
      

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

    您可能感兴趣的文章:

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

    站内搜索