切换主题
十三、正则表达式
一、语法
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() | 获取异常的详细信息 |
DQ博客