正则表达式(十七)

简介

  在程序开发中,经常会碰到需要匹配、查找、替换、判断字符串,如果用纯编码方式解决的话,难度较大,而且很浪费时间,通过正则表达式可以解决这些问题。

  正则表达式并不只属于某一门程序语言。在众多的编程语言当中,包括JAVA、Perl、PHP、Python、JavaScript和JScript,都无一例外内生地支持正则表达式处理。Scala语言同样支持正则表达式。scala可以直接通过Java操作正则表达式的方式使用正则表达式,但scala实现了自己的方式,它更为灵活。

常用符号及含义

符号 含义
句点符号. 它是一种通配符,用于匹配一个字符。例如Spa.k,可以匹配Spark、Spaak等任意字母组成的字符串,还可以匹配Spa#k,Spa k等特殊字符组成的字符串。
[] 限定匹配。例如Spa[ark]k只会匹配Spark,Spaak,Spakk这三个字符串,对于其它的不会匹配。
\|或匹配。例如Spa(a|r|rr|k)k,则可以匹配Spark,Spaak,Spakk及Sparrk。

|Spark | 匹 配 行 结 束 符 。 例 如 S p a r k 匹配的是以Spark$为结尾行,例如I love Spark,但它不匹配Spark will be very poupular in the future。
^|匹配行开始符。例如^Spark匹配的是以Spark开始的行,如Spark will be very poupular in the future,不匹配I love Spark。
*|匹配0至多个字符。例如Spar,可以匹配任何Spar开始的字符串,如Spar,Spark,Sparkkkkk。
/|转义符。例如Spark/ Spark 匹 配 的 是 包 含 S p a r k 的字符串。
( )|分组符,它会将()中匹配的内容保存起来,可以对其进行访问。例如Spa(a|r|rr|k)k可以对()中匹配的内容保存为一个临时变量,在程序中可以直接对其进行访问。
+|匹配一次或多次。例如Spar+,可以匹配任何Spar开始的字符串,如Spark,Sparkkkkk。
?|匹配0次或一次。例如Spark(s)? 可以匹配Spark和Sparks。
{n}|匹配n次,例如Spark{2},可以匹配I love Sparkk中的Sparkk。
{n,}|至少匹配n次。例如Spark{2,}可以匹配I love Sparksss Sparkss中的Sparksss和Sparkss。
{n,m}|至少匹配n次,最多匹配m次。例如Sparks{2,4}可以匹配I love Sparks Sparkssss中的Sparkssss。

限定匹配[]的用法说明

限定匹配符号 说明
[a-z] 条件限制在小写a to z范围中一个字符
[A-Z] 条件限制在大写A to Z范围中一个字符
[a-zA-Z] 条件限制在小写a to z或大写A to Z范围中一个字符
[0-9] 条件限制在小写0 to 9范围中一个字符
[0-9a-z] 条件限制在小写0 to 9或a to z范围中一个字符
[0-9[a-z]] 条件限制在小写0 to 9或a to z范围中一个字符(交集)
[^a-z] 条件限制在非小写a to z范围中一个字符
[^A-Z] 条件限制在非大写A to Z范围中一个字符
[^a-zA-Z] 条件限制在非小写a to z或大写A to Z范围中一个字符
[^0-9] 条件限制在非小写0 to 9范围中一个字符
[^0-9a-z] 条件限制在非小写0 to 9或a to z范围中一个字符

特殊字符

符号 | 含义
—|—
\|反斜杠
\t|间隔(‘/u0009’)
\n|换行 (‘/u000A’)
\r|回车 (‘/u000D’)
\d|数字 等价于[0-9]
\D|非数字 等价于[^0-9]
\s|空白符号 [/t/n/x0B/f/r]
\S|非空白符号 [^/t/n/x0B/f/r]
\w|单独字符 [a-zA-Z_0-9]
\W|非单独字符 [^a-zA-Z_0-9]
\f|换页符
\e|Escape
\b|一个单词的边界
\B|一个非单词的边界
\G|前一个匹配的结束

简单实例

匹配邮箱

object RegexMatch {
  def main(args: Array[String]): Unit = {
    val sparkRegex="^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$".r
    for(matchString <- sparkRegex.findAllIn("[email protected]"))
    {
      println(matchString)
    }
  }
}

匹配网址

object RegexMatch {
  def main(args: Array[String]): Unit = {
    val sparkRegex="^[a-zA-Z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\s*)?$".r
    for(matchString <- sparkRegex.findAllIn("http://www.xuetuwuyou.com"))
    {
      println(matchString)
    }
  }
}

匹配手机号

object RegexMatch {
  def main(args: Array[String]): Unit = {
    val sparkRegex="(86)*0*13\\d{9}".r
    for(matchString <- sparkRegex.findAllIn("13887888888"))
    {
      println(matchString)
    }
  }
}

匹配IP

object RegexMatch {
  def main(args: Array[String]): Unit = {
    val sparkRegex="(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)".r
    for(matchString <- sparkRegex.findAllIn("192.168.1.1"))
    {
      println(matchString)
    }
  }
}

忠于技术,热爱分享。欢迎关注公众号:java大数据编程,了解更多技术内容。

正则表达式(十七)_第1张图片

你可能感兴趣的:(scala)