切换主题
十三、正则表达式
一、语法
1、元字符
常见的元字符
元字符 | 说明 |
---|---|
\ | 例如,n 匹配字符n ,而\n 匹配换行符 。序列\\ 匹配\ ,而\( 匹配( |
^ | |
$ | |
* | 例如,zo* 匹配z 或zoo |
+ | 例如,zo+ 匹配zoo ,但是不匹配z |
? | 例如,a?ve? 匹配never 中的ve |
. | |
(pattern) | 分组,用于将多个表达式组合成一个整体,匹配的子串可以生成匹配项集合,并可以对其进行操作 |
x|y | 例如,`z |
{n} | 精确匹配n 次。例如,o{2} 不匹配Bob 中的o ,但是匹配foooood 中的前两个。 |
{n,} | 例如,o{2,} 不匹配Bob 中的o ,但是匹配foooood 中的所有o 。o{1,} 表达式等效于o+ ,o{0,} 等效于o* |
{n,m} | 例如,o{1,3} 匹配fooooood 中的前三个0 。o{0,1} 表达式等效于o? |
[xyz] | 例如,[abc] 匹配plain 中的a |
[^xyz] | 例如,[abc] 匹配plain 中的p |
[a-z] | 例如,[a-z] 匹配英文字母中的任何小写的字母字符 |
[^m-z] | 例如,[^m-z] 匹配未在范围m 到z 之间的任何字符 |
\A | |
\b | 例如,er\b 匹配never 中的er ,但是不匹配verb 中的er |
\B | ea*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
次,其中n
和m
都是非负整数
(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() | 尝试将整个输入序列与模式匹配,返回 true 或 false 。 |
find() | 尝试查找与模式匹配的下一个子序列,返回 true 或 false 。 |
group() | 返回与前一次匹配所匹配的输入子序列。 |
start() | 返回上次匹配的起始索引。 |
end() | 返回上次匹配的结束索引。 |
reset() | 重置匹配器,清除所有状态信息。 |
usePattern(Pattern newPattern) | 更改此匹配器的匹配模式。 |
pattern() | 返回此匹配器的匹配模式。 |
lookingAt() | 尝试从输入序列的开头开始匹配模式,返回 true 或 false 。 |
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() | 获取异常的详细信息 |