Java基础 - Java中的正则表达式
程序员文章站
2024-02-10 11:19:04
...
正则表达式是对字符串的强大的处理工具,可以对字符串进行查找、提取、分割、替换操作。所谓正则表达式,可以把他看成匹配字符串的模板。
一、正则表达式中允许使用的字符
字符 | 解释 |
---|---|
x | 任意合法字符x |
\0xxx | 8进制表示法表示的字符 |
\xhh | 16进制表示法表示的字符 |
\uhhhh | 16进制表示的Unicode字符 |
\t | 制表符 |
\n | 换行符 |
\r | 回车符 |
\f | 换页符 |
\a | 报警符 |
\e | Escape符 |
\cx | x对应的控制符。如\cM匹配Ctrl-M。x值必须A-Z或者a-z |
还有一些特殊的符号
字符 | 解释 |
---|---|
$ | 匹配一行的结尾 |
^ | 匹配一行的开头 |
() | 子表达式 |
[] | 子表达式,匹配集合 |
{} | 匹配前面子表达式的频度 |
* | 指定前面表达式出现0次或者多次 |
+ | 指定前面表达式出现1次或者多次 |
? | 指定前面表达式出现0次或者多次 |
. | 匹配除了\n以外的任何单字符 |
\ | 转义用 |
| | 指定两项之间的任何一项 |
以上这些就只可以直接出现在正则表达式中的字符。
例子:
"\u0041\\\\" //用于匹配"A\\" 即 A\
"\\?\\[" //用于匹配"\?\[" 即 ?[
二、正则表达式中的通配符
以上的例子都只是单个字符匹配,如果说要任意一个字母匹配都可以,那就不能用上面例子这种写法,通配符很好解决这个问题。
预定义字符(即“通配符”)
预定义字符 | 解释 |
---|---|
. | 匹配任意字符 |
\d | 匹配0-9的任意数字 |
\D | 匹配非数字 |
\s | 匹配所有空白字符,包括空格、\t、\r、\n、\f等 |
\S | 匹配所有非空白字符 |
\w | 匹配所有的单词字符,包括0-9,26个字母,下划线(_) |
\W | 匹配所有非单词字符 |
例子:
"\\d\\d\\d-\\d\\d\\d-\\d\\d\\d\\d" //匹配如 000-000-0000形式的电话号码
三、字符集合
[]就是做匹配集合,只要符合[]内的表达式,就可以被匹配。
表达式可用的符号
符号 | 解释 |
---|---|
x | 任意单词字符,如[abc],表示匹配a、b、c中任意一个 |
- | 表示范围,如[a-c],表示a到c的任意一个,a、b、c |
^ | 表示非,如[^a-c],表示除a、b、c外的任意一个 |
&& | 表达式1&&表达式2,表示表达式1与2的交集 |
四、子表达式
()表达式很有意思,用于匹配,如果表达式搭配其他符号意义就不一样了。
符号 | 解释 |
---|---|
(XXX) | 匹配XXX |
(?:XXX) | 这个表达式使用 | 来匹配,如“industr(?:y|ies)”就是一个匹配“industry”或者“industries”更简略的表达式 |
(?=XXX) | 执行正向预测先行搜索的子表达式,该表达式匹配处于匹配 XXX 的字符串的起始点的字符串。例如,’Windows (?=95|98|NT|2000)’ 匹配”Windows 2000”中的”Windows”,但不匹配”Windows 3.1”中的”Windows” |
(?!XXX) | 与(?=XXX)相反 |
五、频度
频度使用的是{}
符号 | 解释 |
---|---|
{n} | 正好匹配n次 |
{n,} | 最少匹配n次 |
{n,m} | n <= m, 至少匹配n次,至多匹配m次 |
例子:
"fooooood" //如果是split的话,结果就是 "f" "" "d"