正则表达式

一分钟使用正则表达式

最基本的正则表达式结构

符号意义
括号[]内是需要匹配的字符,{}里是指定匹配字符的数量,()对表达式进行分组
^表示正则表达式的开始
$表示正则表达式的结束

$|表示正则表达式的结束

正则表达式就是在用一定的规则描述字符串。这个描述可以被用于未知字符串的验证,查找和替换。

基本规则

普通字符

字母、数字、汉字、下划线,以及在正则表达式里不代表特殊含义的字符

转义字符

表达式匹配项
\r,\n回车,换行
\t制表符
\\\
\^^
$$
\..
(\ )()
\[\ ][]
\{\}{}
\||
\**
\??
\++

要匹配到这些字符本身就需要使用转义字符,因为他们在正则表达式里面代表有特殊的含义

多种字符集合表示

表达式匹配项
\d0-9任意一个数字
\wA-Za-z0-9和_,所有大小写字母,数字,及下划线中任意一个字符
\s空格,制表符,换页”\f”等空白字符中的一个
.除换行符以外的一个字符

自定义多字符表达式

表达式可匹配
[ab5@]匹配 “a” 或 “b” 或 “5” 或 “@”
[^abc]匹配 “a”,”b”,”c” 之外的任意一个字符
[f-k]匹配 “f”~”k” 之间的任意一个字母
[^A-F0-3]匹配 “A”~”F”,”0”~”3” 之外的任意一个字符

这里的^意思是非

限定符

表达式作用
?匹配表达式0次或者1次,相当于 {0,1}
+表达式至少出现1次,相当于 {1,}
*表达式不出现或出现任意次,相当于 {0,}

自定义限定符表达式

表达式作用
{n}表达式重复n次
{m,n}表达式至少重复m次,最多重复n次
{m,}表达式至少重复m次

指位符

这一类符号在搜索的结果内不出现

表达式作用
^与字符串开始的地方匹配,不匹配任何字符
$与字符串结束的地方匹配,不匹配任何字符
\b匹配一个单词边界,也就是单词和空格之间的位置,不匹配任何字符

\b的特别说明
表达式”\bfhskd\b”匹配”sfjsfhskd skdfj fhskd mnv”时,只能匹配到fhskd。且表达式的意思是,两端拥有空格的fhskd

高级规则

匹配次数的贪婪与非贪婪

在使用限定符? + *时,默认是尽可能多的匹配。比如,”2333333”,使用”\b+”,会把整个字符串都匹配到,因为正则默认就是在贪婪模式,会尽可能多的匹配符合条件的字符串;”\b+?”只会匹配到一个”2”,?修饰的限定符出于非贪婪模式下,会匹配最小限度符合条件的字符串。

匹配结果的引用

()匹配出来的结果可以在下一次匹配的时候参与匹配。比如,匹配标签”< p>< /p>”(忽略里面的空格),就可以”<(\w+)>(.*?)(/\1)”,其中\1引用了(\w+)匹配出来的结果,使得前后的标签能够成双成对。要使用\后面的数字指的是从左往右,第几个(括住的表达式的结果,对嵌套的表达式同样有效。

非获取匹配的正反向预搜索

其实就是指位符的自定义版本

表达式意义
(?=pattern)放在匹配式的右边,只有在右边符合字符串pattern时,匹配部分才会配选中,而pattern不会被选中。”A(?=B)”通俗地讲就是找到右边带有B的A。
(?!pattern)右边不符合pattern时,匹配成功
(?<=pattern)放在匹配式的左边,且符合pattern时返回成功
(?<!pattern)左边不符合时,匹配成功

那么什么时非获取呢?比如,我们前面提到过()获取的内容可以使用\和数字来获取,这叫做获取匹配;上面的表达式也含有(),但是他们是非获取匹配。
除此以外,(?:pattern)是最后一个带括号的非获取匹配。例如,你需要查找industry industries这两个单词中的一个。你就可以”industr(?:y|ies)”,但是你也能够”industr(y|ies)”表示,只不过在需要获取匹配内容时,可能会使\的数字加1。

其他内容

多种字符补集

表达式可匹配
\S匹配所有非空白字符(”\s” 可匹配各个空白字符)
\D匹配所有的非数字字符
\W匹配所有的字母、数字、下划线以外的字符
\B匹配非单词边界,即左右两边都是 “\w” 范围或者左右两边都不是 “\w” 范围时的字符缝隙

匹配模式

模式说明
i(ignorecase)匹配时忽略大小写
s(singleline)使.能匹配包括\n在内的所有符号
m(multiline)通常情况下,正则表达式只能匹配一行字符串,也就是遇见\n停下来。m可是正则表达式匹配多行字符串
g(global)一般情况,一旦有符合条件字符串,匹配即终止。g强调查找字符串中所有的匹配
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值