正则表达式速查表,快读上手

最近须要用正则来匹配作数据解析方面的处理,整理一下正则表达式的基本用法,使用的时候查一查,方便快捷。正则表达式

元字符

代码 说明
. 匹配除换行符之外的任意字符
* 匹配*前边的内容重复 0 次或屡次
+ 匹配+前边的内容重复 1 次或屡次
? 匹配?前边的内容重复零次或一次
^ 匹配字符串的开始
$ 匹配字符串的结束
\d 匹配一位数字
\b 匹配单词的开始或结束
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符

若是须要匹配元字符,则须要加上转义字符\学习

懒惰限定符

代码/语法 说明
*? 重复任意次,但尽量少重复
+? 重复 1 次或更屡次,但尽量少重复
?? 重复 0 到 1 次,但尽量少重复
{n,m}? 重复 n 到 m 次,但尽量少重复
{n,}? 重复 n 次以上,但尽量少重复

a.*b,它将会匹配最长的以 a 开始,以 b 结束的字符串。若是用它来搜索 aabab 的话,它会匹配整个字符串 aabab。测试

a.*?b匹配最短的,以 a 开始,以 b 结束的字符串。若是把它应用于 aabab 的话,它会匹配 aab(第一到第三个字符)和 ab(第四到第五个字符)。code

逻辑

代码/语法 说明
{n} 重复 n 次
{n,} 重复 n 次或更屡次
{n,m} 重复 n 到 m 次
[] []中包含的字符出现任意一个
| 匹配分枝条件,从左到右地测试每一个条件
() ()内为总体,与{}连用为重复()内总体

反义

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

经常使用分组语法

分类 代码/语法 说明
捕获 (exp) 匹配exp,并捕获文本到自动命名的组里
(?exp) 匹配exp,并捕获文本到名称为name的组里,也能够写成(?'name'exp)
(?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号
零宽断言 (?=exp) 匹配exp前面的位置,好比\b\w+(?=ing\b),匹配以 ing 结尾的单词的前面部分(除了 ing 之外的部分)
(?<=exp) 匹配exp后面的位置,好比(?<=\bre)\w+\b会匹配以 re 开头的单词的后半部分(除了 re 之外的部分)
(?!exp) 匹配后面跟的不是exp的位置
(?<!exp) 匹配前面不是exp的位置
注释 (?#comment) 这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读

例子:ci

(?=exp)也叫零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式 exp。好比\b\w+(?=ing\b),匹配以 ing 结尾的单词的前面部分(除了 ing 之外的部分),如查找I'm singing while you're dancing.时,它会匹配 sing 和 danc。字符串

(?<=exp)也叫零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式 exp。好比(?<=\bre)\w+\b会匹配以 re 开头的单词的后半部分(除了 re 之外的部分),例如在查找 reading a book 时,它匹配 ading。get

零宽度负预测先行断言(?!exp),断言此位置的后面不能匹配表达式 exp。例如:\d{3}(?!\d)匹配三位数字,并且这三位数字的后面不能是数字;\b((?!abc)\w)+\b匹配不包含连续字符串 abc 的单词。io

同理,咱们能够用(?<!exp),零宽度负回顾后发断言来断言此位置的前面不能匹配表达式exp:(?<![a-z])\d{7}匹配前面不是小写字母的七位数字。table

参照:class

轻松学习正则表达式

相关文章
相关标签/搜索