正则表达式是一个强大的字符串处理工具,可以对字符串查找,提取,分割和替换。
String类里有几个特殊的处理方法:
- boolean matches (String regex): 判断该字符串是否匹配指定的正则表达式regex
- String replaceAll(String regex,String replacement):将该字符串中所有匹配regex的子字符串替换成replacement
- String replaceFirst(String regex,String replacement): 将该字符串中第一个匹配regex的子字符串替换成replacement
- String[] split(String regex): 将字符串以regex为分隔符,分割成多个子字符串
正则表达式支持的合法字符如下:
Character | Explanation |
x | x代表任意合法的字符 |
\0mnn | 八进制数0mnn所表示的字符 |
\xhh | 十六进制值0xhh所表示的字符 |
\uhhhh | 十六进制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。 |
正则表达式中的特殊字符:
Special Character | Description |
$ | 匹配一行的结尾。如果要匹配字符$本身,则用\$ |
^ | 匹配一行的开头。如果要匹配字符^本身,则用\^ |
( ) | 标记子表达式的开始和结束位置 |
[ ] | 用于确定中括号表达式的开始和结束位置 |
{ } | 用于标记前面子表达式的出现频度 |
* | 指定前面子表达式可以出现零次或多次 |
+ | 指定前面子表达式可以出现一次或多次 |
? | 指定前面子表达式可以出现零次或一次 |
. | 匹配除换行符\n之外的任何单字符 |
\ | 用于转义下一个字符,或指定八进制 十六进制字符 |
| | 指定两项之间任选一项 |
Pre-definition character | Description |
. | 可以匹配任何字符 |
\d | 匹配0~9的数字 |
\D | 匹配非数字 |
\s | 匹配所有的空白字符,包括空格,制表符,回车符,换页符,换行符等 |
\S | 匹配所有的非空白字符 |
\w | 匹配所有的单词字符,包括0~9所有数字,26个英文字母和下划线 |
\W | 匹配所有的非单词字符 |
Expression | Description |
表示枚举 | [abc],表示a,b,c中任意一个字符 |
表示范围:- | [a-f],表示a~f范围内的任意字符。范围可以结合枚举使用,如[a-dx-z],表示a~d,x~z范围内的任意字符 |
表示求否:^ | 例如:[^abc], 表示非a,b,c的任意字符;[^e-h]表示不是e~h的任意字符 |
表示与:&& | [a-z&&[^b-d]],表示a~z范围内除了b~d的字符,即[ae-z] |
表示并 | [a-d[m-o]],表示[a-dm-o] |
Boundary matching character | Description |
^ | 行的开头 |
$ | 行的结尾 |
\b | 单词的边界 |
\B | 非单词的边界 |
\A | 输入的开头 |
\G | 前一个匹配的结尾 |
\Z | 输入的结尾,仅用于最后的字符 |
\z | 输入的结尾 |
Pattern p=Pattern.compile("abc");
Matcher matcher=p.matcher("aaaabc");
boolean b=matcher.matches();
上面定义的Pattern对象可以多次重复使用。如果某个正则表达式仅需要一次使用,则可以直接使用Pattern类的静态matches()方法。
boolean b=Pattern.matches("abc","aaaabc");
Matcher类的常用方法:
find():返回目标字符串中是否包含与Pattern匹配的子串。
group():返回上一次与Pattern匹配的子串。
start():返回上一次与Pattern匹配的子串在目标字符串中的开始位置。
end():返回上一次与Pattern匹配的子串在目标字符串中的结束位置加1.
lookingAt():返回目标字符串前面部分与Pattern是否匹配。
matches():返回整个目标字符串与Pattern是否匹配。
reset():将现有的Matcher对象应用于一个新的字符序列。