最近须要用正则来匹配作数据解析方面的处理,整理一下正则表达式的基本用法,使用的时候查一查,方便快捷。正则表达式
代码 | 说明 |
---|---|
. | 匹配除换行符之外的任意字符 |
* | 匹配* 前边的内容重复 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