2025年01月28日 Java正则匹配字符串 极客笔记
正则表达式是一种强大的工具,用于在字符串中搜索和匹配特定模式的文本。在Java中,我们可以使用java.util.regex
包来实现正则表达式的功能。本文将详细介绍Java中正则表达式的用法,包括如何创建正则表达式对象、如何进行匹配和查找等操作。
在Java中,我们需要使用Pattern
类来创建正则表达式对象。Pattern
类提供了compile()
方法来编译正则表达式并返回一个Pattern
对象。我们可以通过调用Pattern
对象的matcher()
方法获取一个Matcher
对象,用于进行匹配操作。
示例代码如下所示:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class RegexDemo {
public static void main(String[] args) {
String pattern = "foo";
String text = "foo bar foo";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(text);
while (m.find()) {
System.out.println("Found at index " + m.start() + " - " + m.end());
}
}
}
在上面的示例中,我们首先定义了一个正则表达式"foo"
和一个目标字符串"foo bar foo"
。然后我们使用Pattern.compile()
方法编译正则表达式,得到一个Pattern
对象p
。接下来我们使用p.matcher()
方法获取一个Matcher
对象m
,并通过调用m.find()
方法进行匹配操作。
运行上面的代码,输出如下所示:
Found at index 0 - 3
Found at index 8 - 11
从输出可以看出,我们成功匹配到了两个字符串”foo”,分别位于索引0至3和8至11。
在Java中,正则表达式的匹配规则遵循Perl正则表达式语法。下面列举了一些常用的正则表达式元字符和修饰符:
.
:匹配任意字符(除了换行符)^
:匹配目标字符串的开始位置$
:匹配目标字符串的结束位置*
:匹配0个或多个前面的字符+
:匹配1个或多个前面的字符?
:匹配0个或1个前面的字符{n}
:匹配恰好n个前面的字符{n,}
:匹配至少n个前面的字符{n,m}
:匹配至少n个且不超过m个前面的字符[]
:匹配指定范围内的任意一个字符()
:分组,用于提取匹配结果我们可以使用.
元字符来匹配任意一个字符。下面的示例中,我们匹配了一个单词中的第二个字符:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class RegexDemo {
public static void main(String[] args) {
String pattern = ".oo";
String text = "foo bar zoo";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(text);
while (m.find()) {
System.out.println("Found at index " + m.start() + " - " + m.end() + ": " + m.group());
}
}
}
运行上面的代码,输出如下所示:
Found at index 1 - 4: foo
Found at index 8 - 11: zoo
我们可以使用^
和$
元字符来匹配目标字符串的开头和结尾。下面的示例中,我们匹配了以”foo”开头和以”foo”结尾的字符串:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class RegexDemo {
public static void main(String[] args) {
String pattern1 = "^foo";
String pattern2 = "foo$";
String text = "foo bar foo";
Pattern p1 = Pattern.compile(pattern1);
Matcher m1 = p1.matcher(text);
while (m1.find()) {
System.out.println("Found at index " + m1.start() + " - " + m1.end() + ": " + m1.group());
}
Pattern p2 = Pattern.compile(pattern2);
Matcher m2 = p2.matcher(text);
while (m2.find()) {
System.out.println("Found at index " + m2.start() + " - " + m2.end() + ": " + m2.group());
}
}
}
运行上面的代码,输出如下所示:
Found at index 0 - 3: foo
Found at index 8 - 11: foo
我们可以使用*
、+
、?
、{n}
等元字符来匹配重复出现的字符。下面的示例中,我们匹配了任意个数的”o”字符:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class RegexDemo {
public static void main(String[] args) {
String pattern = "o+";
String text = "fooo bar zoo";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(text);
while (m.find()) {
System.out.println("Found at index " + m.start() + " - " + m.end() + ": " + m.group());
}
}
}
运行上面的代码,输出如下所示:
Found at index 1 - 4: ooo
Found at index 8 - 9: o
我们可以使用()
元字符来分组匹配多个字符,并通过m.group(n)
方法来获取每个分组的匹配结果。下面的示例中,我们匹配一个由数字和字母组成的字符串,并提取数字和字母部分:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class RegexDemo {
public static void main(String[] args) {
String pattern = "(\\d+)([a-z]+)";
String text = "123abc 456def";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(text);
while (m.find()) {
System.out.println("Found at index " + m.start() + " - " + m.end() + ": " + m.group());
System.out.println("Number part: " + m.group(1));
System.out.println("Letter part: " + m.group(2));
}
}
}
运行上面的代码,输出如下所示:
Found at index 0 - 6: 123abc
Number part: 123
Letter part: abc
Found at index 8 - 14: 456def
Number part: 456
Letter part: def
本文介绍了Java中正则表达式的基本用法,包括如何创建正则表达式对象、匹配规则以及常见匹配操作。通过学习和掌握正则表达式的知识,我们可以更加灵活和高效地处理字符串操作。
本文链接:http://so.lmcjl.com/news/22236/