正则表达式(十七)

简介

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

  正则表达式并不只属于某一门程序语言。在众多的编程语言当中,包括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("zhouzhihubeyond@sina.com"))
    {
      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大数据编程,了解更多技术内容。

这里写图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java大数据编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值