Java 正则表达式用于匹配字符串的某些模式。Java 提供了 java.util.regex
包来支持正则表达式操作,主要包含以下三个类:
Pattern
类:一个正则表达式的编译表示。Matcher
类:一个引擎,使用正则表达式进行模式匹配操作。PatternSyntaxException
类:表示一个正则表达式模式中的语法错误。
一、Pattern
类的常用方法:
1.compile(String regex, int flag)
- 编译给定的正则表达式并创建一个带有指定标志的模式对象。常用标志包括
Pattern.CASE_INSENSITIVE
(忽略大小写),Pattern.MULTILINE
(多行模式),Pattern.DOTALL
(使.
匹配包括换行符在内的所有字符)等。 - 示例:
-
Pattern pattern = Pattern.compile("a*b", Pattern.CASE_INSENSITIVE);
2.split(CharSequence input,int limit)
-
根据模式拆分输入序列并返回拆分结果的字符串数组,并限制数组的长度
-
示例:
-
String[] result = pattern.split("one,two,three",2);
3.pattern()
-
返回模式的字符串表示。
-
示例:
-
String regex = pattern.pattern();
4.flags()
-
返回用于编译此模式的匹配标志。
-
示例:
-
int flags = pattern.flags();
5.quote(String s)
-
返回给定字符串的字面值模式字符串(即,将字符串中的特殊字符转义)。
-
示例:
-
String quoted = Pattern.quote("a*b");
代码实现
import java.util.regex.*;
public class PatternExample {
public static void main(String[] args) {
// 编译一个正则表达式
Pattern pattern = Pattern.compile("a*b");
// 创建一个 Matcher 对象
Matcher matcher = pattern.matcher("aaaaab");
// 检查完全匹配
if (matcher.matches()) {
System.out.println("完全匹配");
}
// 重新创建 Matcher 对象
matcher = pattern.matcher("aaaaab");
// 检查从开头匹配
if (matcher.lookingAt()) {
System.out.println("从开头匹配");
}
// 重新创建 Matcher 对象
matcher = pattern.matcher("xxaaaabxx");
// 查找匹配的子串
while (matcher.find()) {
System.out.println("找到匹配的子串: " + matcher.group());
}
// 使用 split 方法
String[] result = pattern.split("one,aab,two,aab,three");
for (String str : result) {
System.out.println("拆分结果: " + str);
}
// 使用 quote 方法
String quoted = Pattern.quote("a*b");
System.out.println("转义后的字符串: " + quoted);
}
}
二、Matcher
类的常用方法:
1.matches()
- 尝试将整个输入序列与模式匹配。
- 返回值:布尔值,表示是否匹配成功。
- 示例:
boolean matches = matcher.matches();
2.lookingAt()
- 尝试将输入序列从头开始与模式匹配。
- 返回值:布尔值,表示是否匹配成功。
- 示例:
boolean lookingAt = matcher.lookingAt();
3.find(int start)
- 尝试查找输入序列中与模式匹配的下一个子序列。
- int start:表示指定位置的索引 不用索引就是查找整个序列
- 返回值:布尔值,表示是否找到匹配。
- 示例:
boolean found = matcher.find(10);
4.group(int group)
- 返回前一次匹配操作中找到的匹配子序列。
- 参数表示指定捕获组
- 返回值:字符串,表示匹配的子序列。
- 示例:
String group = matcher.group(1);
5.groupCount()
- 返回匹配器模式中的捕获组数。
- 返回值:整数,表示捕获组的数量。
- 示例:
int groupCount = matcher.groupCount();
6.start(int group)
- 返回前一次匹配操作中匹配子序列的起始索引。
- 参数表示指定捕获组的起始索引
- 返回值:整数,表示匹配子序列的起始索引。
- 示例:
int start = matcher.start();
int startindex=matcher.satrt(1);
7.end(int group)
- 返回前一次匹配操作中匹配子序列的结尾索引。
- 参数表示指定捕获组的结尾索引
- 返回值:整数,表示匹配子序列的结尾索引。
- 示例:
int end = matcher.end();
int endindex=matcher.end(1);
8.replaceAll(String replacement)
- 替换输入序列中所有与模式匹配的子序列。
- 返回值:字符串,表示替换后的字符串。
- 示例:
String result = matcher.replaceAll("替换的字符");
代码示例
import java.util.regex.*;
public class MatcherExample {
public static void main(String[] args) {
// 编译一个正则表达式
Pattern pattern = Pattern.compile("(\\d{3})-(\\d{2})-(\\d{4})");
// 创建一个 Matcher 对象
Matcher matcher = pattern.matcher("123-45-6789");
// 检查完全匹配
if (matcher.matches()) {
System.out.println("完全匹配");
System.out.println("Group 1: " + matcher.group(1));
System.out.println("Group 2: " + matcher.group(2));
System.out.println("Group 3: " + matcher.group(3));
}
// 重新创建 Matcher 对象
matcher = pattern.matcher("xxx123-45-6789yyy");
// 查找匹配的子串
while (matcher.find()) {
System.out.println("找到匹配的子串: " + matcher.group());
System.out.println("起始索引: " + matcher.start());
System.out.println("结束索引: " + matcher.end());
}
// 使用 replaceAll 方法
matcher = pattern.matcher("123-45-6789 and 987-65-4321");
String result = matcher.replaceAll("***-**-****");
System.out.println("替换后的字符串: " + result);
}
}
三、 正则表达式基本用法
1.创建Pattern对象
可以使用 Pattern.compile()
方法创建一个 Pattern
对象:
Pattern pattern = Pattern.compile("a*b");
2. 创建 Matcher
对象
使用 Pattern
对象的 matcher()
方法创建一个 Matcher
对象:
Matcher matcher = pattern.matcher("aaaaab");
3. 进行匹配操作
使用 Matcher
对象的各种方法来进行匹配操作:
boolean matches = matcher.matches(); // 完全匹配
boolean lookingAt = matcher.lookingAt(); // 从字符串的开始匹配
boolean find = matcher.find(); // 查找字符串中符合的子串
代码演示
以下是一个完整的示例,展示如何使用正则表达式进行字符串匹配:
import java.util.regex.*;
public class RegexExample {
public static void main(String[] args) {
// 创建一个正则表达式 Pattern 对象
Pattern pattern = Pattern.compile("a*b");
// 创建一个 Matcher 对象
Matcher matcher = pattern.matcher("aaaaab");
// 检查完全匹配
if (matcher.matches()) {
System.out.println("完全匹配");
}
// 重新创建 Matcher 对象(因为 matches() 方法会消费掉匹配结果)
matcher = pattern.matcher("aaaaab");
// 检查从开头匹配
if (matcher.lookingAt()) {
System.out.println("从开头匹配");
}
// 重新创建 Matcher 对象
matcher = pattern.matcher("xxaaaabxx");
// 查找匹配的子串
while (matcher.find()) {
System.out.println("找到匹配的子串: " + matcher.group());
}
}
}