两年刚开始学习正则表达式的时候做的一些笔记,之前需要处理一些数据去学习正则的应用,现在太久没有使用有些遗忘了,可能可以给刚学习正则的同学一些帮助
常用元字符
. 匹配除换行符以外的任意字符
\w 匹配字母、数字、下划线、汉字(实际使用汉字效果不好)
\s 匹配任意空白符(空格)
\d 匹配数字
\b 匹配单词开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
常用限定符
* 重复0次或很多次
+ 重复1次或很多次
? 重复0次或1次
{n} 重复n次
{n,} 重复n次或很多次
{n,m} 重复n到m次
常用反义字符
\W 匹配非字母、数字、下划线、汉字
\S 匹配非任意空白符(空格)
\D 匹配非数字
\B 匹配非单词开始或结束
[^x] 匹配除x以外的任意字符
[^aeiou] 匹配除元音以外的任意字符
懒惰限定符
*? 重复0次或很多次,但尽可能少重复
+? 重复1次或很多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复
分组
(exp 匹配exp,并捕获文本到自动命名的组里
(?<name>exp) 匹配exp,并匹配文本到名称为name的组里
零宽断言
(?=exp) 匹配exp前面的位置(放后面)
(?!exp) 匹配不是exp前面的位置(放后面)
(?<=exp) 匹配exp后面的位置(放前面)
(?<!exp) 匹配不是exp后面的位置(放前面)
零宽断言和[]字符集的区别
匹配dacing
若只要后缀为ing单词前的字符,则需要使用零宽断言
\w+(?=ing) 匹配出来的是dac
\w+[ing] 匹配出来的是dacing
零宽表示不占位,断言表示true或false
常用的其他符号
\. 元字符转义
[] 字符集,例如[0123], [1-5], [a-z]
() 分组,匿名组,是以索引进行命名,第一个开始为1(注意)
| 分支,就是或(||)
//i 一次匹配,只匹配第一次
//g 全局匹配,全部都匹配