Java正则表达式
Java正则表达式
1.正则表达式是什么?
正则表达式是用于匹配和操作文本模式的工具。它由字符和特殊元字符组成,能够实现强大的文本搜索、验证、替换等功能。
2.正则表达式基本语法
(1)匹配普通字符
- 匹配数字 [0123456789]简写为[0-9]
- 匹配小写字母[a-z]
- 匹配大写字母[A-Z]
- 匹配大小写字母[a-zA-Z]或[A-Za-z]
正则表达式中ascii码表对应的较小的值放在前面,大的值放在后面
(2)元字符
元字符 | 说明 |
---|---|
. | 匹配除换行符以外的任意字符 |
\ | 转义字符,可以解除特殊字符的特殊功能 |
^ | 匹配字符串开始的位置 |
$ | 匹配字符串结束的位置 |
* | 匹配前面的字符0次或多次 |
+ | 匹配前面的字符1次或多次 |
? | 匹配前面的字符0次或1次 |
{n} |
匹配前面的字符n次 |
{n,} |
匹配前面的字符至少n次 |
{n,m} |
匹配前面的字符至少n次,至多m次 |
x|y | 匹配x或y |
[xyz] | 匹配xyz任意的一个字符 |
[^xyz] | 不匹配xyz中的字符 |
[^m-z] | 匹配未在指定范围m到z中的任何字符 |
\A | 只匹配字符串的开头 |
\B | 匹配非单词的边界 |
\b | 匹配某个单词的边界 |
\D | 匹配非数字字符 |
\d | 匹配数字字符 |
\f | 匹配换页字符 |
\n | 匹配换行符 |
\r | 匹配回车符 |
\S | 匹配任何非空白字符 |
\s | 匹配任何空白字符,包括空格、制表符等 |
\W | 匹配任何非单词字符 |
\w | 匹配任何单词字符,包括数字和下划线 |
\Z | 只匹配字符串的结尾或结尾的换行符之前 |
\z | 只匹配字符串的结尾 |
(3)举例
比如我们要写一个表达式表达ipv4地址
那么正则表达式可以写为:
^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))$
^
表示匹配字符串的开始位置。(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)
这部分用于匹配 0 到 255 之间的数字。- \.表示匹配‘.’
- {3}表示匹配3次
- ((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)) 匹配最后一个数字段。因为最后一段的结尾没有‘.’所以单独提出来
- $ 表示匹配字符串的结尾。
(4)惰性匹配 & 贪婪匹配
惰性匹配:惰性匹配会尽量匹配少的字符(.*?)
贪婪匹配:贪婪匹配会尽量匹配多的字符(.*)
举个例子
这里有一个字符串"Hello World"
我们要匹配以H开头,o结尾的字符串,那么
这里有两个o,那么匹配结果是什么样的呢?
- 惰性匹配的表达式
H.*?o
,因为受到?
的限制,所以匹配结果为Hello
- 贪婪匹配的表达式
H.*o
,此时没有?
的限制,会尽可能的匹配,所以匹配结果为Hello Wo
3.Java使用正则表达式
(1)Pattern对象
compile
函数用于将正则表达式的模式字符串编译成一个 Pattern
对象
Pattern
对象 代表了一个已编译的正则表达式模式,用于创建 Matcher
对象来执行具体的匹配操作。
String regex = "正则表达式";
Pattern pattern = Pattern.compile(regex);
(2)Matcher对象
Matcher matcher = pattern.matcher("要匹配的字符串");
matcher.find() //返回布尔值,检验字符串是否存在符合正则表达式的部分,若有则返回true
matcher.matches() //返回布尔值,检验字符串是否符合正则表达式,若符合返回true
matcher.group() //返回字符串,group(0)表示匹配的整个字符串,group(1),表示匹配的第一个括号的内容
while (matcher.find()) {
matcher.appendReplacement(sb, "XXX");//将匹配到的部分换为xxx,并将结果添加到StringBuffer对象
}
matcher.appendTail(sb);