相思本是无凭语,

莫向花牋费泪行。

hanstary

相思本是无凭语,莫向花牋费泪行。

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);

posted on 2024-06-23 09:05  hanstary  阅读(30)  评论(0编辑  收藏  举报

导航