正则表达式

经常会有查找符合某些复杂规则的字符串的需要,这时我们就要使用正则表达式。

正则表达式分为元字符和普通字符。

表1.常用的元字符
代码    说明
.    匹配除换行符以外的任意字符
\w    匹配字母或数字或下划线或汉字
\s    匹配任意的空白符
\d    匹配数字
\b    匹配单词的开始或结束
^    匹配字符串的开始
$    匹配字符串的结束

一般元字符后面接上表示次数的符号,表示元字符代表的出现的次数。例如*,+,{8},{2}.。。。{5,12}至少5次最多12次
这里的+是和*类似的元字符,不同的是*匹配任意次(可能是0次),而+则匹配1次或更多次
表2.常用的限定符
代码/语法    说明
*    零次或更多次
+    一次或更多次
?    零次或一次
{n}    n次
{n,}    n次或更多次
{n,m}    n到m次

举个例子

\w{6} 匹配连续6个字母或数字或下划线或汉字
\ba\w*\b匹配以字母a开头的单词——先是某个单词开始处(\b),然后是字母a,然后是任意数量的字母或数字(\w*),最后是单词结束处(\b)。
\w* 匹配至少0个的字母或数字或下划线或汉字,所以一般没有单独这么写。可以a\w*  ,以a开头的字符串或a
\d+ 匹配至少1个数字


scala> val regex="""\d+""".r
regex: scala.util.matching.Regex = \d+

scala> val s="a334 23ff 1dddd"
s: String = a334 23ff 1dddd

scala> val m=regex.findAllIn(s)
m: scala.util.matching.Regex.MatchIterator = non-empty iterator

scala> m.toArray
res5: Array[String] = Array(334, 23, 1)

^\d{5,12}$因为使用了^和$,所以输入的整个字符串都要用来和\d{5,12}来匹配,也就是说整个输入必须是5到12个数字,因此如果输入的QQ号能匹配这个正则表达式的话,那就符合要求了。


scala> val regex="""\ba\w{2}\b""".r
regex: scala.util.matching.Regex = \ba\w{2}\b


scala> val s="ass alll ad"
s: String = ass alll ad

scala> val m=regex.findAllIn(s)
m: scala.util.matching.Regex.MatchIterator = non-empty iterator

scala> m.toArray
res2: Array[String] = Array(ass)


字符转义
如果你想查找元字符本身的话,比如你查找.,或者*,就出现了问题:你没办法指定它们,因为它们会被解释成别的意思。这时你就得使用\来取消这些字符的特殊意义。因此,你应该使用\.和\*。当然,要查找\本身,你也得用\\.

例如:deerchao\.net匹配deerchao.net,C:\\Windows匹配C:\Windows。

指定区间段

如果你想匹配没有预定义元字符的字符集合(比如元音字母a,e,i,o,u),应该怎么办?

很简单,你只需要在方括号里列出它们就行了,像[aeiou]就匹配任何一个英文元音字母,[.?!]匹配标点符号(.或?或!)。

我们也可以轻松地指定一个字符范围,像[0-9]代表的含意与\d就是完全一致的:一位数字;同理[a-z0-9A-Z_]也完全等同于\w(如果只考虑英文的话)。

分支条件

当你使用正则表达式表示满足其中之一即可,用 | 连接两个正则

a | b 匹配分枝条件时,将会从左到右地测试每个条件,所以注意顺序

分组

只要将你的正则表达式用()括起来就是一组(\d{1,3}\.){3}  数字一到3个加上 . 这种情形共有3次,举例 344.2.12就符合

反义

有时需要查找不属于某个能简单定义的字符类的字符。比如想查找除了数字以外,其它任意字符都行的情况,这时需要用到反义:

表3.常用的反义代码


代码/语法

说明


\W 匹配任意不是字母,数字,下划线,汉字的字符 
\S 匹配任意不是空白符的字符 
\D 匹配任意非数字的字符 
\B 匹配不是单词开头或结束的位置 
[^x] 匹配除了x以外的任意字符 
[^aeiou] 匹配除了aeiou这几个字母以外的任意字符 

例子:\S+匹配不包含空白符的字符串。

<a[^>]+>匹配用尖括号括起来的以a开头的字符串。
--------------------- 
作者:linhao19891124 
来源:CSDN 
原文:https://blog.csdn.net/linhao19891124/article/details/50074967 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值