java中正则表达式

时间:2023-03-08 15:35:27

在《java编程思想》中,java中的 \\ 表示“我要插入一个正则表达式的反斜线,所以其后的字符具有特殊的意义。”如果想插入一个普通的反斜线,那么应该使用 \\\\

理解:

我们使用的反斜杠,就是一个 \

但是在java等编程语言中,我们需要使用转义:一个文艺反斜杠 \\ 表示一个普通反斜杠 \

正则表达式中,反斜杠也需要转义,即 \\ 表示匹配一个 \,然后蛋疼的事儿就来了,当你在 java中写 \\ 时,其实正则表达式引擎只接受到了一个 \,所以,如果你想让正则表达式引擎接受两个反斜杠,那么这两个斜杠都得转义。

于是,正则表达式匹配一个 \ 是,应该写 \\

这时,第一个 \ 在 java 字符串中写为 \\

第二个 \ 在 java 字符串中写为 \\

于是,你就看到了java中无比蛋疼的 \\\\

常用正则表达式:

1、字符

B            指定字符B

\xhh       十六进制值为0xhh的字符

\uhhhh   十六进制表示为0xhhhh的Unicode字符

\t           制表符Tab

\n          换车符

\r           回车

\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                        词的边界

\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次