首页 > 代码库 > 正则表达式

正则表达式

正则表达式所支持的合法字符

合法字符说明
x字符x(x可代表任何合法的字符)
\0mnn八进制数0mnn所表示的字符
\xhh十六进制值0xhh所表示的字符
\uhhhh十六进制值0uhhhh所表示的Unicode字符
\t制表符(‘\u0009‘)
\n换行符(‘\u000A‘)
\r回车符(‘\u000D‘)
\f换页符(‘\u000C‘)
\a报警符(‘\u0007‘)
\eEscape符(‘\u001B‘)
\cxx对应的控制符,例如\cM匹配Ctrl-M。

 正则表达式中的特殊字符

特殊字符说明匹配本身书写方式
.匹配除了换行符\n之外的任何单字符\.
   
$匹配一行的结尾\$
^匹配一行的开头\^
   
[]用于确定中括号表达式的开始和结束位置\[ \]
()标记子表达式的开始和结束位置\( \)
   
{}用于标记前面子表达式出现频率\{ \}
*指定前面子表达式可以出现零次或多次\*
+指定前面子表达式可以出现一次或多次\+
?指定前面子表达式可以出现零次或一次\?
   
\用于转义下一个字符,或指定八进制、十六进制字符\\
   
|指定两项之间任选一项\|

预定义字符

预定义字符说明(匹配一个字符
.可以匹配任何字符
\d匹配0~9的所有数字
\D匹配非数字
\s匹配所有空白字符,包括空格、制表符、回车符、换页符、换行符等
\S匹配所有非空白字符
\w匹配所有的单词字符,包括0~9所有数字、26个英语字母和下划线(_)
\W匹配所有的非单词字符

方括号表达式

例子用途说明
[acd]表示枚举表示匹配acd中任意一个字符
[a-f]表示范围表示匹配a~f中任意一个字符
[^acd]表示求否表示匹配非acd的任意一个字符

1. [a-z&&[def]]

2. [a-z&&[^bc]]

3. [a-z&&[^m-p]]

表示“与”运算

1.表示求a~z和def的交集,最终匹配def中任意一个字符

2.表示求a~z和非bc字符的交集,最终匹配在a~z中非bc的任意一个字符,即[ad-z]

3.表示求a~z和非m-p字符的交集,最终匹配在a~z中非m-p的任意一个字符,即[a-lq-z]

[a-d[m-p]]表示“并”运算和枚举类似,同[a-dm-p]

边界匹配符

边界匹配符说明
^行的开头
$行的结尾
\b单词的边界
\B非单词的边界
\A输入的开头
\G前一个匹配的结尾
\Z输入的结尾,仅用于最后的结束符
\z输入的结尾

 

三种模式的数量表示符

贪婪模式(一致匹配下去,直到无法匹配)勉强模式(匹配最少的字符)占用模式(只有java支持)说明
X?X??X?+X表达式出现零次或一次
X*X*?X*+X表达式出现零次或多次
X+X+?X++X表达式出现一次或多次
X{n}X{n}?X{n}+X表达式出现n次
X{n,}X{n,}?X{n,}+X表达式最少出现n次
X{n,m}X{n,m}?X{n,m}+X表达式最少出现n次,最多出现m次

总结:

1.在使用正则表达式匹配的过程中,都是按照字符串中的字符,从前往后逐个匹配的。

2.单个预定义字符、单个方括号表达式都是匹配单个字符。如果加上数量表示符,就可以简化正则表达式的书写。

例如需要匹配一个138开头的手机号,如果不用数量表示符,就应该这样写138\\d\\d\\d\\d\\d\\d\\d\\d,如果采用数量表达式,就可以这样表示138\\d{8}

3.正则表达式的书写方式都是从前往后单个字符、单个预定义字符、单个方括号表达式来组合书写,其中会插入边界匹配符以及数量表示符。

4.除了上面表格中指定的字符,其他字符如果在正则表达式中出现,一律作为普通字符对待。

正则表达式