精通正则表达式一:元字符

在正则表达式中,有一些特殊的字符,例如‘* ?’等,他们有特殊的意义,‘*’代表出现0至多次,‘?’代表1次或0次,称他们为元字符。

行起始和结束字符

^   匹配行的起始
$   匹配行的结束

例如,在http://regexr.com/中:
这里写图片描述
这里只匹配了倒数两行中的http,但倒数第三行中的http并没有匹配到,这就是元字符“^”起到的作用,注意:确保你在匹配的时候点选了flags中的multiline,不然这些文本默认为一行,即只有第一行开头有行起始符。行结束符类似。

字符组

[]   字符组,字符组里面的字符只能出现一个,即其中的字符是或的意思。

例如:
这里写图片描述

当需要表示某些连续的数字或字母时,可以用‘-’连字符来连接

[1-6]  表示123456
[a-c]  表示abc

要注意,连字符‘-’一定要出现在字符组中且出现在中间才能表示范围,当出现在‘[’之后又或‘]’之前时,它只是表示一般的字符。

[-13]  匹配'-''1''3'

当然,也可以字符组中没有出现的字符,即排除型字符组

[^ ]  排除型字符组

这里写图片描述

匹配任意字符

.   匹配任意字符

需要注意的是,当‘.’在字符组内是匹配的就是字符‘.’而不是任意字符,在字符组外,当想要匹配字符‘.’时,可以使用‘.’来匹配,如下:
这里写图片描述
其他的元字符如果想匹配它本身,都可以用‘\’来转义。

多选结构

|     代表或

字符组中的字符也是代表或,但它只能匹配文本中的单个字符,而多选结构可以匹配任意长度的字符
这里写图片描述
注意,表示或的那部分要用()括起来,不然就成了匹配‘twen’或‘hirty’了

单词分界符

\<   匹配单词的开头
\>   匹配单词的结尾

书上说的是有的egrep版本中有的是这两个元字符,但在http://regexr.com/ 上支持的是这个

\b  匹配单词的边界

我试了一下,我的egrep这两个都支持。
这里写图片描述

这里写图片描述
可以看到,Welcome中的come并没有匹配。

量词

?   之前紧邻的元素出现0次或1次
+   之前紧邻的元素出现1次到多次
*   之前紧邻的元素出现0次到多次

例如我前面的关于拉丁猪文字游戏的例子:

String regex = "([aeiou]*)([^eaiou])(.*)";

第一个‘*’匹配任意多个元音字母,第二个匹配任意多个任意字符,括号是分组用的,与量词无关。
当然,也可以自己规定出现多少次:

{min,max}

例如:
这里写图片描述

一些常用的元字符

下面列举了一些常用的元字符,基本在所有支持正则表达式的语言和工具中都是通用的。

\d    [0-9]
\D    除了‘\d’之外的所有字符
\w    [a-zA-Z0-9]
\W    除了‘\w’之外的所有字符
\s    所有的“空白“”字符,例如空格符,制表符,进纸符
\S    除了‘\s’之外的所有字符

反向引用

先举例子,如果想要匹配叠词,及AABB的形式,用前面的量词即可以解决

.{2}.{2}

但是如果要匹配 AACAA 这些类似的的文本是该怎么匹配呢?
这里写图片描述
这里的‘\1’就是代表第一组的意思,括号能记忆其中的子表达式匹配的文本,不论这些文本是什么,元字符序列‘\1’都能记住它,当然,第二组就是‘\2’了。注意,用括号括起来才能成为组。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值