正则表达式是一个匹配字符串的模板,任何字符串都能作为正则表达式,可以对字符串进行查找、提取、分割、替换等操作。
String类提供了几个特殊方法,
- boolean matches(String regex):判断该字符串是否匹配指定的正则表达式
- String replaceAll(String regex, String replacement):将该字符串中所有匹配regex的字串替换成replacement
- String replaceFirst(String regex, String replacement):将该字符串中第一个匹配regex的字符串替换成replacement、
- String split(String regex):以regex作为分隔符,将该字符串分割成多个字串
1、合法字符:
- x:字符x
- \0mnn:八进制数0mnn所表示的字符
- \xhh:十六进制0xhh所表示的字符
- \uhhhh:十六进制0xhhhh所表示的Unicode字符
- \t:制表符('\u0009')
- \n:换行符('\u000A')
- \r:回车符('\u000D')
- \f:换页符('\u000C')
- \a:报警符('\u0007')
- \cx:x对应的控制符,x必须是字母
2、特殊字符:匹配其本身时需要使用转义字符(\)
- $
- ^
- ( )
- [ ]
- { }
- *
- +
- ?
- .
- \
- |
3、通配符:
- “.”:可以匹配任何字符
- \d:匹配0-9的所有数字
- \D:匹配非数字
- \s:匹配所有空白字符(空格、制表符、回车符、换页符、换行符)
- \S:匹配非空白符
- \w:匹配所有单词符(英文字母、数字、下划线)
- \W:匹配非单词符
4、方括号:
- 表示枚举:[abcd]表示a、b、c、d其中任意一个字符
- 表示范围-:[a-c]表示a-c范围内的任意字符 [a-cd-z]表示a-c、d-z范围内的任意字符
- 表示求否:[^abc]表示非a、b、c的任意字符
- 表示与&&:[a-z&&[def]]:表示a-z与[def]的交集
5、边界通配符:
- ^:行的开头
- $:行的结尾
- \b:单词的边界
- \B:非单词的边界
- \A:输入的开头
- \G:前一个匹配的结尾
- \Z:输入的结尾,仅用于最后的结束符
- \z:输入的结尾
6、数量标识符:
- Greedy(贪婪模式):数量表示符默认采用贪婪模式,该模式会一直匹配下去,知道无法匹配
- Reluctant(勉强模式):用问号(?)后缀表示,只会匹配最少的字符
- Possessive(占有模式):用加号(+)后缀表示,目前只有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次 |