📅  最后修改于: 2023-12-03 15:32:03.846000             🧑  作者: Mango
在Java中,正则表达式是一种处理文本的强大工具。它可以用于搜索、解析、替换字符串中的文本。Java中正则表达式由Pattern和Matcher类实现,本文主要介绍Pattern类。
Pattern类是正则表达式的编译后表示。可以通过调用Pattern类的静态方法compile()
对正则表达式进行编译,编译后生成一个Pattern对象。例如:
Pattern pattern = Pattern.compile("\\d+"); // 匹配数字
compile(String regex)
: 将正则表达式编译为Pattern对象。matcher(CharSequence input)
: 创建一个Matcher对象,用于匹配输入的序列。matches(String regex, CharSequence input)
: 判断输入的字符串是否与正则表达式匹配。split(CharSequence input)
: 根据正则表达式将输入的字符串分割为多个字符串数组。toString()
: 返回此模式的字符串表示形式。例如:
String text = "Hello 123 World!";
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
System.out.println("数字:" + matcher.group()); // 输出:数字:123
}
上述代码示例中,Pattern.compile("\\d+")
编译了匹配数字的正则表达式,matcher(text)
创建了一个匹配text
的Matcher对象。在while循环中,使用matcher.find()
方法查找是否有匹配的字符串,若找到,使用matcher.group()
方法获取匹配的字符串。
Java中正则表达式的语法主要包含以下内容:
\
将特殊字符转义为普通字符。[]
:表示字符集合,匹配方括号内列举的任意一个字符。[^]
:表示除了字符集合中列举的字符外的任意一个字符。-
:表示范围,如[a-z]
表示匹配小写字母a到z之间的任意一个字符。例如:
Pattern pattern = Pattern.compile("[a-f]");
Matcher matcher = pattern.matcher("My test message");
while (matcher.find()) {
System.out.println(matcher.group()); // 输出:e
}
上述代码中, [a-f]
匹配a到f之间的任意一个字符,My test message
中有一个字符e匹配该正则表达式,因此输出e。
*
:表示匹配0次或多次。+
:表示匹配1次或多次。?
:表示匹配0次或1次。{n}
:表示匹配n次。{n,}
:表示至少匹配n次。{n,m}
:表示匹配n次到m次。例如:
Pattern pattern = Pattern.compile("lo+");
Matcher matcher = pattern.matcher("Hello World");
while (matcher.find()) {
System.out.println(matcher.group()); // 输出:lo
}
上述代码中,lo+
表示匹配一个或多个字符l,后跟一个字符o,Hello World
中有一个字符组lo满足该正则表达式。
^
:表示匹配开头。$
:表示匹配结尾。\b
:表示匹配单词边界。\B
:表示匹配非单词边界。例如:
Pattern pattern = Pattern.compile("^Hello.*");
Matcher matcher = pattern.matcher("Hello World!");
if (matcher.find()) {
System.out.println("Matched: " + matcher.group()); // 输出:Matched: Hello World!
}
上述代码中,^Hello.*
表示字符串以Hello开头,后跟任意字符。"Hello World!"
匹配该正则表达式,因此输出Matched: Hello World!。
用括号把正则表达式括起来,表示一个组。可以使用()
对正则表达式进行分组,以便更好地匹配。例如:
Pattern pattern = Pattern.compile("(\\d{4})-(\\d{2})-(\\d{2})");
Matcher matcher = pattern.matcher("1998-05-02");
if (matcher.find()) {
System.out.println("Year: " + matcher.group(1)); // 输出:Year: 1998
System.out.println("Month: " + matcher.group(2)); // 输出:Month: 05
System.out.println("Day: " + matcher.group(3)); // 输出:Day: 02
}
上述代码中,"(\\d{4})-(\\d{2})-(\\d{2})"
表示匹配由一个4位数字,一个连字符,两个2位数字和一个连字符组成的字符串。"1998-05-02"
与该正则表达式匹配,(\\d{4})
表示第一个组匹配4位数字,(\\d{2})
表示第二个组匹配连字符后的2位数字,以此类推。
用于转义正则表达式中的特殊字符。例如,\.
表示匹配点。