以前因为偷懒,觉得正则表达式不用学,用的时候网上查查就行。终于借着博客好好整理下。
一、基本表达式
表达式 |
说明 |
[abc] |
表示“a”或“b”或“c” |
[0-9] |
表示0~9中任意一个数字,等价于[0123456789] |
[\u4e00-\u9fa5] |
表示任意一个汉字 |
[^a1<] |
表示除“a”、“1”、“<”外的其它任意一个字符 |
[^a-z] |
表示除小写字母外的任意一个字符 |
表达式 |
说明 |
\d |
任意一个数字,相当于[0-9],即0~9 中的任意一个 |
\w |
任意一个字母或数字或下划线,相当于[a-zA-Z0-9_] |
\s |
任意空白字符,相当于[ \r\n\f\t\v] |
\D |
任意一个非数字字符,\d取反,相当于[^0-9] |
\W |
\w取反,相当于[^a-zA-Z0-9_] |
\S |
任意非空白字符,\s取反,相当于[^ \r\n\f\t\v] |
表达式 |
说明 |
. |
匹配除了换行符 \n 以外的任意一个字符 |
表达式 |
说明 |
^ |
匹配字符串开始的位置,不匹配任何字符 |
$ |
匹配字符串结束的位置,不匹配任何字符 |
\b |
匹配单词边界,不匹配任何字符 |
表达式 |
说明 |
\r,\n |
回车和换行 |
\\ |
匹配“\”本身 |
\^,\$,\. |
分别匹配“^”、“$”和“.” |
表达式 |
说明 |
举例 |
{m} |
表达式匹配m次 |
“\d{3}”相当于“\d\d\d ” “(abc){2}”相当于“abcabc” |
{m,n} |
表达式匹配最少m次,最多n次 |
“\d{2,3}”可以匹配“12”或“321”等2到3位的数字 |
{m,} |
表达式至少匹配m次 |
“[a-z]{8,}”表示至少8位以上的字母 |
? |
表达式匹配0次或1次,相当于{0,1} |
“ab?”可以匹配“a”或“ab” |
* |
表达式匹配0次或任意多次,相当于{0,} |
“<[^>]*>”中“[^>]*”表示0个或任意多个不是“>”的字符 |
+ |
表达式匹配1次或意多次,至少1次,相当于{1,} |
“\d\s+\d”表示两个数字中间,至少有一个以上的空白字符 |
表达式 |
说明 |
| |
多个子表达式之间取“或”的关系 |
表达式 |
说明 |
(Expression) |
普通捕获组,将子表达式Expression匹配的内容保存到以数字编号的组里 |
(?<name> Expression) |
命名捕获组,将子表达式Expression匹配的内容保存到以name命名的组里 |
普通捕获组(在不产生歧义的情况下,简称捕获组)是以数字进行编号的,编号规则是以“(”从左到右出现的顺序,从1开始进行编号。通常情况下,编号为0的组表示整个表达式匹配的内容。
命名捕获组可以通过捕获组名,而不是序号对捕获内容进行引用,提供了更便捷的引用方式,不用关注捕获组的序号,也不用担心表达式部分变更会导致引用错误的捕获组。
一些表达式中,不得不使用( ),但又不需要保存( )中子表达式匹配的内容,这时可以用非捕获组来抵消使用( )带来的副作用。
表达式 |
说明 |
(?:Expression) |
进行子表达式Expression的匹配,并将匹配内容保存到最终的整个表达式的区配结果中,但Expression匹配的内容不单独保存到一个组内 |
环视只进行子表达式的匹配,匹配内容不计入最终的匹配结果,是零宽度的。
环视按照方向划分有顺序和逆序两种,按照是否匹配有肯定和否定两种,组合起来就有四种环视。环视相当于对所在位置加了一个附加条件。
表达式 |
说明 |
(?<=Expression) |
逆序肯定环视,表示所在位置左侧能够匹配Expression |
(?<!Expression) |
逆序否定环视,表示所在位置左侧不能匹配Expression |
(?=Expression) |
顺序肯定环视,表示所在位置右侧能够匹配Expression |
(?!Expression) |
顺序否定环视,表示所在位置右侧不能匹配Expression |
二、举例
1、手机号码正则:^(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$
2、16-19位的字符串,要求纯数字:^(\d{16,19})$
3、包含某一个字符串:^((?=hello).)*$
4、不包含某个字符串:^((?!hello).)*$
5、正整数(不含0):^[1-9]\d*$
6、正整数(含0):^([1-9]\d*)|0$ (注:除0本身,首位不得为0)
7、正整数或者正小数:^(([1-9]\d*)|0)([.]\d+){0,1}$ (注:0.0也是合法的小数)
8、纯汉字字符串:^[\u4e00-\u9fa5]*$