在《java编程思想》中,java中的 \
表示“我要插入一个正则表达式的反斜线,所以其后的字符具有特殊的意义。”如果想插入一个普通的反斜线,那么应该使用 \\
。
理解:
我们使用的反斜杠,就是一个
但是在java等编程语言中,我们需要使用转义:一个文艺反斜杠 \
表示一个普通反斜杠
正则表达式中,反斜杠也需要转义,即 \
表示匹配一个 ,然后蛋疼的事儿就来了,当你在 java中写
\
时,其实正则表达式引擎只接受到了一个 ,所以,如果你想让正则表达式引擎接受两个反斜杠,那么这两个斜杠都得转义。
于是,正则表达式匹配一个 是,应该写
\
这时,第一个 在 java 字符串中写为
\
第二个 在 java 字符串中写为
\
于是,你就看到了java中无比蛋疼的 \\
常用正则表达式:
1、字符
B 指定字符B
xhh 十六进制值为0xhh的字符
uhhhh 十六进制表示为0xhhhh的Unicode字符
制表符Tab
换车符
回车
f 换页
e 转义(Escape)
2、字符类
. 任意字符
[abc] 包含a、b 和c的任何字符(和a|b|c作用相同)
[^abc] 除了a、b 和c之外的任何字符(否定)
[a-zA-z] 从a到z或从A到Z的任何字符(范围)
[abc[hij]] 任意a、h、i、和j字符(与a|b|c|h|i|j作用相同)(合并)
[a-z&&[hij]] 任意h、i或j(交)
s 空白符(空格、tab、换行、换页和回车)
S 非空白符([^s])
d 数字[0-9]
D 非数字[^0-9]
w 词字符[a-zA-Z0-9]
W 非词字符[^w]
3、逻辑操作符
XY Y跟在X后面
X|Y X或Y
(X) 捕获组,可以在表达式中用i表示第i个捕获组
4、边界匹配符
^ 一行的起始
$ 一行的结束
词的边界
B 非词的边界
G 前一个匹配的结束
5、量词
贪婪型 勉强型 占有型 如何匹配
X? X?? X?+ 一个或零个X
X* X*? X*+ 零个或多个X
X+ X+? X++ 一个或多个X
X{n} X{n}? X{n}+ 恰好n次X
X{n,} X{n,}? X{n,}+ 至少n次X
X{n,m} X{n,m}? X{n,m}+ X至少n次,且不要超过m次