Java正则Pattern类简单上手

正则表达式的作用

  1. 验证数据的有效性
  2. 替换文本内容
  3. 从字符串中提取子字符串

正则表达式应用场景

  1. 邮箱验证
  2. 手机号码验证
  3. 用户名、密码是否合法

Pattern类的使用方法

指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建 Matcher 对象,依照正则表达式,该对象可以与任意字符序列匹配。执行匹配所涉及的所有状态都驻留在匹配器中,所以多个匹配器可以共享同一模式。
因此,典型的调用顺序是:

//下面是通过正则判断字符串是否是数字的实例
//1.通过正则表达式创建正则编译对象
Pattern compile = Pattern.compile("[-]??\\d+\\.??\\d*?");
//2.编译对象匹配需要验证的字符串
Matcher matcher = compile.matcher("-3.33");
//3.判断字符串是否匹配正则
boolean flag = matcher.matches();
//4.返回或者输入true or false
System.out.println(flag);//true

正则表达式的构造

字符

构造

匹配

x

字符 x

\\

反斜线字符

\0n

带有八进制值 0 的字符 n (0 <= n <= 7)

\0nn

带有八进制值 0 的字符 nn (0 <= n <= 7)

\0mnn

带有八进制值 0 的字符 mnn(0 <= m <= 3、0 <= n <= 7)

\xhh

带有十六进制值 0x 的字符 hh

\uhhhh

带有十六进制值 0x 的字符 hhhh

\t

制表符 ('\u0009')

\n

新行(换行)符 ('\u000A')

\r

回车符 ('\u000D')

\f

换页符 ('\u000C')

\a

报警 (bell) 符 ('\u0007')

\e

转义符 ('\u001B')

\cX

对应于 x 的控制符

字符类

构造

匹配

[abc]

abc(简单类)

[^abc]

任何字符,除了 abc(否定)

[a-zA-Z]

azAZ,两头的字母包括在内(范围)

[a-d[m-p]]

admp[a-dm-p](并集)

[a-z&&[def]]

def(交集)

[a-z&&[^bc]]

az,除了 bc[ad-z](减去)

[a-z&&[^m-p]]

az,而非 mp[a-lq-z](减去)

预定义字符

构造

匹配

.

任何字符(与行结束符可能匹配也可能不匹配)

\d

数字:[0-9]

\D

非数字: [^0-9]

\s

空白字符:[ \t\n\x0B\f\r]

\S

非空白字符:[^\s]

\w

单词字符:[a-zA-Z_0-9]

\W

非单词字符:[^\w]

POSIX 字符类(仅 US-ASCII)

构造

匹配

\p{Lower}

小写字母字符:[a-z]

\p{Upper}

大写字母字符:[A-Z]

\p{ASCII}

所有 ASCII:[\x00-\x7F]

\p{Alpha}

字母字符:[\p{Lower}\p{Upper}]

\p{Digit}

十进制数字:[0-9]

\p{Alnum}

字母数字字符:[\p{Alpha}\p{Digit}]

\p{Punct}

标点符号:!"#$%&'()*+,-./:;<=>?@[\]^_{

\p{Graph}

可见字符:[\p{Alnum}\p{Punct}]

\p{Print}

可打印字符:[\p{Graph}\x20]

\p{Blank}

空格或制表符:[ \t]

\p{Cntrl}

控制字符:[\x00-\x1F\x7F]

\p{XDigit}

十六进制数字:[0-9a-fA-F]

\p{Space}

空白字符:[ \t\n\x0B\f\r]

java.lang.Character 类(简单的 java 字符类型)

构造

匹配

\p{javaLowerCase}

等效于 java.lang.Character.isLowerCase()

\p{javaUpperCase}

等效于 java.lang.Character.isUpperCase()

{javaWhitespace}

等效于 java.lang.Character.isWhitespace()

\p{javaMirrored}

等效于 java.lang.Character.isMirrored()

Unicode 块和类别的类

构造

匹配

\p{InGreek}

Greek 块(简单块)中的字符

\p{Lu}

大写字母(简单类别)

\p{Sc}

货币符号

\P{InGreek}

所有字符,Greek 块中的除外(否定)

[\p{L}&&[^\p{Lu}]]

所有字母,大写字母除外(减去)

边界匹配器

构造

匹配

^

行的开头

$

行的结尾

\b

单词边界

\B

非单词边界

\A

输入的开头

\G

上一个匹配的结尾

\Z

输入的结尾,仅用于最后的结束符(如果有的话)

\z

输入的结尾

Greedy 数量词

构造

匹配

X?

X,一次或一次也没有

X*

X,零次或多次

X+

X,一次或多次

X{n}

X,恰好 n

X{n,}

X,至少 n

X{n,m}

X,至少 n 次,但是不超过 m

Reluctant 数量词

构造

匹配

X??

X,一次或一次也没有

X*?

X,零次或多次

X+?

X,一次或多次

X{n}?

X,恰好 n

X{n,}?

X,至少 n

X{n,m}?

X,至少 n 次,但是不超过 m

Logical 运算符

构造

匹配

XY

X 后跟 Y

X|Y

XY

(X)

X,作为捕获组

Back 引用

构造

匹配

\n

任何匹配的 nth 捕获组

引用

构造

匹配

\

Nothing,但是引用以下字符

\Q

Nothing,但是引用所有字符,直到 \E

\E

Nothing,但是结束从 \Q 开始的引用

特殊构造(非捕获)

构造

匹配

(?:X)

X,作为非捕获组

(?idmsux-idmsux)

Nothing,但是将匹配标志i d m s u x on - off

(?idmsux-idmsux:X)

X,作为带有给定标志 i d m s u x on - off

(?=X)

X,通过零宽度的正 lookahead

(?!X)

X,通过零宽度的负 lookahead

(?!X)

X,通过零宽度的正 lookbehind

(?<!X)

X,通过零宽度的负 lookbehind

(?>X)

X,作为独立的非捕获组

字段摘要

字段摘要

static int

CANON_EQ启用规范等价。

static int

CASE_INSENSITIVE启用不区分大小写的匹配。

static int

COMMENTS模式中允许空白和注释。

static int

DOTALL启用 dotall 模式。

static int

LITERAL启用模式的字面值解析。

static int

MULTILINE启用多行模式。

static int

UNICODE_CASE启用 Unicode 感知的大小写折叠。

static int

UNIX_LINES启用 Unix 行模式。

方法摘要

方法摘要

static Pattern

compile(String regex)将给定的正则表达式编译到模式中。

static Pattern

compile(String regex, int flags) 将给定的正则表达式编译到具有给定标志的模式中。

int

flags()返回此模式的匹配标志。

Matcher

matcher(CharSequence input)创建匹配给定输入与此模式的匹配器。

static boolean

matches(String regex, CharSequence input)编译给定正则表达式并尝试将给定输入与其匹配。

String

pattern()返回在其中编译过此模式的正则表达式。

static String

quote(String s)返回指定 String 的字面值模式 String

String[]

split(CharSequence input)围绕此模式的匹配拆分给定输入序列。

String[]

split(CharSequence input, int limit)围绕此模式的匹配拆分给定输入序列。

String

toString()返回此模式的字符串表示形式。