目录
正则表达式(Regular Expression),通常称为正则或Regex,是一个用于匹配文本模式的强大工具。正则表达式由一系列字符和特殊字符组成,用于定义搜索模式。它可以用于字符串匹配、搜索、替换和验证,是文本处理和模式匹配的常见工具。
一、正则表达式
一些常见的正则表达式元字符和用法:
-
普通字符: 正则表达式中的大多数字符(字母、数字、标点符号等)表示它们自己。例如,正则表达式
abc
匹配字符串中的字符"abc"。 -
点号
.
: 表示匹配任意单个字符(除了换行符)。例如,正则表达式a.b
匹配字符串中的"aab"、"acb"等。 -
字符类
[...]
: 用于匹配字符类中的任何一个字符。例如,正则表达式[aeiou]
匹配任何一个元音字母。 -
反义字符类
[^...]
: 用于匹配不在字符类中的任何一个字符。例如,正则表达式[^0-9]
匹配任何一个非数字字符。 -
重复限定符
{}
: 用于指定重复次数。例如,正则表达式a{2}
匹配两个连续的字母"a"。 -
星号
*
: 表示匹配前面的字符零次或多次。例如,正则表达式ab*c
匹配"ac"、"abc"、"abbc"等。 -
加号
+
: 表示匹配前面的字符一次或多次。例如,正则表达式ab+c
匹配"abc"、"abbc"等,但不匹配"ac"。 -
问号
?
: 表示匹配前面的字符零次或一次。例如,正则表达式colou?r
匹配"color"和"colour"。 -
选择符
|
: 用于分隔多个选择项,匹配其中任何一个。例如,正则表达式cat|dog
匹配"cat"或"dog"。 -
转义字符
\
: 用于转义特殊字符,使其匹配字面值。例如,正则表达式\.
匹配实际的句点字符。 -
开始锚点
^
: 表示匹配字符串的开头。例如,正则表达式^abc
匹配以"abc"开头的字符串。 -
结束锚点
$
: 表示匹配字符串的结尾。例如,正则表达式xyz$
匹配以"xyz"结尾的字符串。 -
分组
()
: 用于将模式的一部分分组,以便进行重复、捕获或其他操作。例如,正则表达式(abc)+
匹配"abc"、"abcabc"等。 -
捕获组
()
: 用于捕获匹配的子字符串,以便后续引用或处理。例如,正则表达式(ab)c
匹配"abc",并捕获"ab"。 -
非捕获组
(?:...)
: 用于分组但不捕获匹配的子字符串。例如,正则表达式(?:ab)+
匹配"ab"、"abab"等,但不捕获。 -
前向匹配
(?=...)
: 用于查找满足条件的前缀。例如,正则表达式x(?=y)
匹配字符串中的"x",但只有在后面跟着"y"时才匹配成功。 -
反向匹配
(?<=...)
: 用于查找满足条件的后缀。例如,正则表达式(?<=x)y
匹配字符串中的"y",但只有在前面有"x"时才匹配成功。
正则表达式是一个强大的文本处理工具,可以用于字符串的高级操作和模式匹配。学习和掌握正则表达式需要一些时间和练习,但它对于处理文本数据和进行字符串操作是非常有价值的。
二、java 正则表达式详解
正则表达式(Regular Expression,简称正则或Regex)是一种强大的文本匹配和搜索工具,Java也提供了对正则表达式的支持。Java使用java.util.regex
包来处理正则表达式,你可以在Java中使用正则表达式来执行字符串匹配、搜索、替换等操作。
以下是一些常见的Java正则表达式操作和详解:
-
正则表达式的基本语法: 在Java中,正则表达式可以由普通字符和特殊字符组成,特殊字符通常用来表示模式。例如,
abc
是一个简单的正则表达式,用于匹配字符串中的字符"abc"。 -
Pattern 类:
java.util.regex.Pattern
类用于表示正则表达式的编译版本。要创建一个Pattern
对象,你需要使用Pattern.compile()
方法,将正则表达式字符串作为参数传递。Pattern pattern = Pattern.compile("abc");
-
Matcher 类:
java.util.regex.Matcher
类用于执行匹配操作。你可以使用Pattern.matcher()
方法创建一个Matcher
对象,然后使用它执行匹配操作。Matcher matcher = pattern.matcher("abcde");
-
matches() 方法:
matches()
方法用于检查整个输入字符串是否与正则表达式匹配。它返回一个布尔值,表示是否匹配成功。boolean isMatch = matcher.matches();
-
find() 方法:
find()
方法用于查找输入字符串中的下一个匹配子串。它返回一个布尔值,表示是否找到匹配。boolean found = matcher.find();
-
group() 方法:
group()
方法用于获取匹配的子字符串。你可以使用group(0)
获取整个匹配的字符串,使用group(1)
、group(2)
等获取捕获组中的子字符串。String matchedString = matcher.group();
-
捕获组: 使用圆括号
()
可以创建捕获组。捕获组允许你从匹配的字符串中提取子字符串。例如,正则表达式(\\d+)-(\\d+)
可以用于匹配并捕获形如"123-456"的字符串,并分别提取两个数字。 -
预定义字符类: Java正则表达式支持预定义的字符类,如
\d
(数字)、\w
(单词字符)、\s
(空白字符)等。例如,\d{3}
匹配三个连续的数字。 -
边界匹配符:
^
表示字符串的开始,$
表示字符串的结束。例如,^abc
匹配以"abc"开头的字符串,abc$
匹配以"abc"结尾的字符串。 -
量词: 量词用于指定重复次数,例如
*
表示零次或多次,+
表示一次或多次,?
表示零次或一次,{n}
表示恰好重复 n 次,{n,}
表示至少重复 n 次,{n,m}
表示重复 n 到 m 次。 -
转义字符: 特殊字符如
.
、*
、+
、(
、)
等在正则表达式中有特殊意义,如果要匹配它们本身,需要使用反斜杠\
进行转义。 -
分支条件: 使用
|
来表示分支条件,例如apple|banana
匹配"apple"或"banana"。
以下代码,演示了如何在Java中使用正则表达式进行字符串匹配:
import java.util.regex.*;
public class RegexExample {
public static void main(String[] args) {
String input = "abc123def456";
String patternString = "\\d+"; // 匹配一个或多个数字
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
String matched = matcher.group();
System.out.println("匹配到: " + matched);
}
}
}
以上示例演示了如何使用正则表达式来匹配字符串中的数字。正则表达式 \\d+
匹配一个或多个数字,并使用 find()
方法在输入字符串中查找匹配。然后,使用 group()
方法获取匹配的子字符串。