1. 什么是Java正则表达式
Java正则表达式是对字符串或文本进行模式匹配的一种工具,它使用基于模式匹配的方式查找文本中的内容。在Java中,正则表达式是由java.util.regex包提供支持的。使用Java正则表达式可以进行文本搜索、替换、分割等操作,这为Java程序员提供了强大的操作字符串的工具。
1.1 Java正则表达式的优点
Java正则表达式在文本处理方面有如下优点:
灵活性:Java正则表达式可以匹配各种不同类型的字符串,满足各种不同场景的需求。
精确性:Java正则表达式可以实现精确、各种小数点位数的匹配。
简介性:Java正则表达式可以用很简洁的方式表达各种匹配模式。
1.2 Java正则表达式的缺点
Java正则表达式在一些场景下会出现以下缺点:
难度:Java正则表达式的语法较为复杂,需要学习和积累经验。
性能:对于大量文本匹配,Java正则表达式的性能可能变得很差。
可读性:一些较为复杂的Java正则表达式可能不容易阅读和理解。
2. Java正则表达式的基本用法
2.1 匹配单个字符
Java正则表达式中使用"."表示匹配任意单个字符,使用"\\"表示原义表达字符,使用"[]"表示其中一字符。
String str = "apple";
//匹配第二个字符是“p”的字符串
Pattern pattern = Pattern.compile(".p");
Matcher matcher = pattern.matcher(str);
while(matcher.find()){
System.out.println(matcher.group());
}
此时输出:
p
String str = "12345678";
//匹配第二个字符是“2”、“3”、“4”的字符串
Pattern pattern = Pattern.compile("1[234]56");
Matcher matcher = pattern.matcher(str);
while(matcher.find()){
System.out.println(matcher.group());
}
此时输出:
234
2.2 匹配重复字符
Java正则表达式用"*"表示零次或多次匹配前面的字符;"+"表示一次或多次匹配前面的字符;"?"表示零次或一次匹配前面的字符;使用"{}"表示匹配前面的字符指定次数。
String str = "Java is fun. Do you think so?";
//匹配大写字母
Pattern pattern = Pattern.compile("[A-Z]");
Matcher matcher = pattern.matcher(str);
while(matcher.find()){
System.out.println(matcher.group());
}
此时输出:
J D
String str = "Hello! My name is Jack. I am Jack.";
//匹配重复字符
Pattern pattern = Pattern.compile("Jack");
Matcher matcher = pattern.matcher(str);
while(matcher.find()){
System.out.println(matcher.group());
}
此时输出:
Jack Jack
2.3 匹配位置
Java正则表达式中的位置指定符如下:
"^":匹配输入字符串开始的位置
"$":匹配输入字符串结尾的位置
"\b":匹配单词边界
"\B":匹配非单词边界
String str = "The quick brown fox jumps over the lazy dog.";
//匹配字符串开头
Pattern pattern = Pattern.compile("^The");
Matcher matcher = pattern.matcher(str);
while(matcher.find()){
System.out.println(matcher.group());
}
此时输出:
The
String str = "The quick brown fox jumps over the lazy dog.";
//匹配单词边界
Pattern pattern = Pattern.compile("\\bover\\b");
Matcher matcher = pattern.matcher(str);
while(matcher.find()){
System.out.println(matcher.group());
}
此时输出:
over
3. Java正则表达式的拥有量词
Java正则表达式的拥有量词是指用于描述多次出现的正则表达式特定部分的符号。拥有量词有以下几种:
3.1 "?"
"?"表示匹配0或1次的贪婪量词。使用方法如下:
String str = "Hello! My name is Jack. I am Jack.";
//使用“?”匹配0或1次
Pattern pattern = Pattern.compile("Jack?");
Matcher matcher = pattern.matcher(str);
while(matcher.find()){
System.out.println(matcher.group());
}
此时输出:
Jack Jack
3.2 "*"
"*"表示匹配任意次的贪婪量词。使用方法如下:
String str = "Java is fun. Do you think so?";
//使用“*”匹配任意次
Pattern pattern = Pattern.compile("i.*u");
Matcher matcher = pattern.matcher(str);
while(matcher.find()){
System.out.println(matcher.group());
}
此时输出:
is fun. Do you think so
3.3 "+"
"+"表示匹配至少一次的贪婪量词。使用方法如下:
String str = "Java is fun. Do you think so?";
//使用“+”匹配至少一次
Pattern pattern = Pattern.compile("i.+u");
Matcher matcher = pattern.matcher(str);
while(matcher.find()){
System.out.println(matcher.group());
}
此时输出:
is fun. Do you think so
3.4 "{}"
"{}"表示匹配指定次数的贪婪量词。使用方法如下:
String str = "Java is fun. Do you think so?";
//使用“{}”匹配指定次数
Pattern pattern = Pattern.compile("i.{3}u");
Matcher matcher = pattern.matcher(str);
while(matcher.find()){
System.out.println(matcher.group());
}
此时输出:
is fun
4. 总结
通过本文,我们了解了Java正则表达式的基本用法和拥有量词,基本掌握正则表达式匹配的过程和方法。在实际使用中,由于不同场景需要不同的正则表达式,我们需要不断学习和实践,才能灵活掌握和运用Java正则表达式。