Skip to content

十三、正则表达式

一、语法

1、元字符

常见的元字符

元字符说明
\例如,n匹配字符n,而\n匹配换行符。序列\\匹配\,而\(匹配(
^
$
*例如,zo*匹配zzoo
+例如,zo+匹配zoo,但是不匹配z
?例如,a?ve?匹配never中的ve
.
(pattern)分组,用于将多个表达式组合成一个整体,匹配的子串可以生成匹配项集合,并可以对其进行操作
x|y例如,`z
{n}精确匹配n次。例如,o{2}不匹配Bob中的o,但是匹配foooood中的前两个。
{n,}例如,o{2,}不匹配Bob中的o,但是匹配foooood中的所有oo{1,}表达式等效于o+o{0,}等效于o*
{n,m}例如,o{1,3}匹配fooooood中的前三个0o{0,1}表达式等效于o?
[xyz]例如,[abc]匹配plain中的a
[^xyz]例如,[abc]匹配plain中的p
[a-z]例如,[a-z]匹配英文字母中的任何小写的字母字符
[^m-z]例如,[^m-z]匹配未在范围mz之间的任何字符
\A
\b例如,er\b匹配never中的er,但是不匹配verb中的er
\Bea*r\B表达式匹配neverearly中的ear
\d
\D
\f
\n
\r
\s
\S
\t
\v
\w此表达式等效于[A-Za-z0-9_]
\W此表达式等效于[^A-Za-z0-9_]
\z
\Z

2、限定符

限定符指定在输入字符串中,必须存在上一个元素的多少个示例才能找到匹配项

(1){n}

{n}限定符表示匹配上一个元素n次,其中n是任何非负整数

(2){n,}

{n,}限定符表示至少匹配上一元素n次,其中n是任何非负整数

(3){n,m}

{n,m}限定符表示至少匹配上一元素n次,但不超过m次,其中nm都是非负整数

(4)*

*限定符表示与前面的元素匹配零次或多次,相当于限定符{0,}

(5)+

+限定符表示与前面的元素匹配一次或多次,相当于限定符{1,}

(6)?

?限定符表示与前面的元素匹配一次或多次,相当于限定符{0,1}

3、定位符

定位符说明
^匹配输入字符串的开始位置
$匹配输入字符串的结束位置
\b匹配一个单词的边界,即单词与空格间的位置
\B非单词边界匹配

4、分组构造

分组构造描述了正则表达式的子表达式,用于捕获输入字符串的子字符串。

可以使用()分组构造捕获匹配的子表达式

java
(子表达式)

二、Java处理正则表达式

1、Pattern类

(1)创建方法

java
Pattern pattern = Pattern.compile("regex");

(2)使用方法

方法功能描述
compile(String regex)编译正则表达式字符串为 Pattern 对象
matcher(CharSequence input)创建用于匹配输入字符序列的 Matcher 对象
asPredicate()创建一个断言Predicate类对象用于匹配字符串
pattern()返回该对象编译的正则表达式
split(CharSequence input)根据该对象正则表达式分割字符序列
toString()返回该Pattern对象字符串格式

2、Matcher类

(1)创建方法

java
Matcher matcher = pattern.matcher("input");

(2)使用方法

方法功能描述
matches()尝试将整个输入序列与模式匹配,返回 truefalse
find()尝试查找与模式匹配的下一个子序列,返回 truefalse
group()返回与前一次匹配所匹配的输入子序列。
start()返回上次匹配的起始索引。
end()返回上次匹配的结束索引。
reset()重置匹配器,清除所有状态信息。
usePattern(Pattern newPattern)更改此匹配器的匹配模式。
pattern()返回此匹配器的匹配模式。
lookingAt()尝试从输入序列的开头开始匹配模式,返回 truefalse
hitEnd()如果在输入序列的当前位置或以后的位置中发现输入序列的结尾,则返回 true
region(int start, int end)设置此匹配器的区域。
regionStart() / regionEnd()返回此匹配器的区域的开始索引或结束索引。
appendReplacement(StringBuffer sb, String replacement)将当前匹配的文本替换为指定的替换字符串,并将结果追加到给定的 StringBuffer 对象中。
appendTail(StringBuffer sb)将匹配器的最后一次匹配到的文本以及之后的文本追加到给定的 StringBuffer 对象中。
replaceAll(String replacement)用指定的替换字符串替换输入序列中匹配到的所有子序列。
replaceFirst(String replacement)用指定的替换字符串替换输入序列中第一个匹配到的子序列。

3、PatternSyntaxException类

(1)创建方法

java
try {
    Pattern pattern = Pattern.compile("invalid regex");
} catch (PatternSyntaxException e) {
    // 处理异常
}

(2)使用方法

方法功能描述
getDescription()获取关于语法错误的详细描述
getIndex()获取发生错误的正则表达式的索引位置
getPattern()获取发生错误的正则表达式模式
getMessage()获取异常的详细信息