正则表达式:字符串处理工具,可以对字符串进行查找、提取、分隔、替换等操作。
一、正则表达式支持的合法字符
x:可代表任何合法的字符
\0mnn:八进制数0mnn表示的字符
\xhh:十六进制值0xhh表示的字符
\uhhh:十六进制值0xhhhh所表示的Unicode字符
\t:制表符('\u0009')
\n:换行符('\u000A')
\r:回车符('\u000D')
\f:换页符('\u000C')
\a:报警符('\u0007')
\e:Escape符('\u001B')
\cx:x对应的控制符。例如,\cM匹配Ctrl+M。x值必须为A~Z或a~z之一。
二、正则表达式中的特殊字符
如需匹配则必须首先将这些字符转义,也就是再添加一个反斜线。
S:匹配一行的结尾。要匹配S字符本身,使用\S
^:匹配一行的开头。要匹配字符本身,使用\^
():标记子表达式的开始和结束位置,要匹配^字符本身,请使用\( \)
[]:用于确定中括号表达式的开始和结束位置。要匹配这些字符,使用\[ \]
{}:用于标记前面子表达式可以出现的频度。要匹配这些字符,使用\{ \}
*:指定前面子表达式可以出现零次或多次,要匹配*字符本身,使用\*
+:指定前面子表达式可以出现一次或多次,要匹配+字符本身,使用\+
?:指定前面子表达式可以出现零次或一次。要匹配?本身,使用\?
.:匹配除换行符\n之外的任何单字符,要匹配.字符本身,使用\.
\:用于转义下一个字符,或指定八进制 十六进制字符,如匹配字符本身,使用\\
|:指定两项之间任选一项,如果要匹配|本身,使用\|
注意:Java字符串中反斜杠本身需要转义,因此\\\\表示一个反斜杠,\\.表示一个.。
三、预定义字符
·:可以匹配任何字符
\d:匹配0~9的所有数字
\D:匹配非数字
\s:匹配所有的空白字符,包括空格、制表符、回车符、换页符、换行符等
\S:匹配所有的非空白字符
\w:匹配所有的单词字符,包括0~9所有数字、26个英文字母和下划线(_)
\W:匹配所有的非单词字符
提示:d是digit的意思,代表数字;s是space的意思,代表空白;w是word的意思,代表单词。d,s,w的大写形式恰好匹配与之
相反的字符
四、方括号表达式
处理特殊情况:比如只想匹配a~f的字母,或者匹配除了ab之外的所有小写字母,或者匹配中文字符
表示枚举:例如[abc],表示a、b、c其中任意一个字符:[gz],表示g、z其中任意一个字符
表示范围:-:例如[a-f],表示a~f范围内的任意字符:[\\u004-\\u0056],表示十六进制字符\u0041到\u0056范围的字符。、
范围可以和枚举结合使用,如[a-cx-z],表示a-c,x-z范围内的任意字符
表示求否:^:例如[^abc],表示非a、b、c的任意字符:[^a-f],表示不是a-f范围内的任意字符
表示“与”运算:&&:例如[a-z&&[def]],求a~z和[def]的交集,表示d、e、f
表示“并”运算:并运算与前面的枚举类似,例如[a-d[m-p]],表示[a-dm-p]
五、边界匹配符
^ 行的开头
S 行的结尾
\b 单词的边界
\B 非单词的边界
\A 输入的开头
\G 前一个匹配的结尾
\Z 输入的结尾,仅用于最后的结束符
\z 输入的结尾