首先安利一个可视化正则表达式的工具:
Regexper
一、特殊字符匹配元字符
匹配单个特殊字符,使用以下元字符
. → 匹配任意一个字符 (除换行符\n除外)
\d → 匹配数字,0-9;
\D → 匹配非数字;
\s → 匹配空白,即空白符和tab缩进;
\S → 匹配非空白;
\w → 匹配字母、数字或下划线:a-z、A-Z、0-9、_;
\W → 匹配非字母、数字或下划线;
\x → 匹配十六进制数字;
\O → 匹配八进制数字;
\n → 匹配换行符;
\r → 匹配回车符;
\v → 匹配垂直制表符;
\t → 匹配制表符;
\f → 匹配换页符;
[\b] → 匹配退格字符,加[]是为了和\b区分;
匹配多个字符使用以下元字符:
| → 逻辑或操作符,比如"ab"和"ac"都想匹配到,可以用这样的正则:"ab|c"
* → 前一个字符(子表达式) 出现0次或无限次,即可有可无;
+ → 前一个字符(子表达式) 出现1次或无限次,即最少一次;
? → 前一个字符(子表达式) 出现0次或1次,即要么不出现,要么只出现一次;
{m} → 前一个字符(子表达式) 出现m次;
{m,} → 前一个字符(子表达式) 至少出现m次;
{m,n} → 前一个字符(子表达式) 出现m到n次;
注:尽量使用
+?,因为做了优化,相比起{m}{m,}{m,n}速度更快。
*
三、集合与区间
匹配某个范围内字符,使用以下元字符
[] → 匹配字符集合[]中列举的字符,如:[abc],就是匹配abc中的一个字符;
[^] → 匹配不在字符集合[]中列举的字符,如:[^abc],就是匹配不在abc中的字符;
- → 定义一个区间,或者说匹配一个范围,如:[a-z] 就是匹配26个小写字母中的一个;
四、位置边界
限制查找的位置等,使用以下元字符
^ → 匹配一行的开始,多行模式能识别\n;
$ → 匹配一行的结尾,多行模式能识别\n;
\A → 匹配字符串开头,单行模式效果同^,多行模式不能识别\n;
\Z → 匹配字符串结尾,单行模式效果同$,多行模式不能识别\n;
\b → 匹配单词边界,即单词和空格间的位置,如:er\b 可以匹配never中的er,却不能匹配verb中的er;