Java正则表达式详解与示例
正则表达式是一种强大且灵活的文本匹配工具,它在Java编程中有着广泛的应用。正则表达式提供了一种描述字符模式的语法,允许你在文本中查找、匹配、替换符合特定规则的字符串。在本文中,我们将深入探讨Java中正则表达式的基本概念、语法以及实际应用,并通过详细的示例演示其用法。
1. 正则表达式基础
1.1 字符类
字符类用于定义一个字符集,可以匹配其中任意一个字符。例如,[abc]
表示匹配字符 'a'、'b' 或 'c'。
String pattern = "[abc]";
String text = "apple";
boolean isMatch = text.matches(pattern);
System.out.println(isMatch); // 输出:true
1.2 范围
通过指定范围,可以简化字符类的表示。例如,[a-z]
表示匹配所有小写字母。
String pattern = "[a-z]";
String text = "hello";
boolean isMatch = text.matches(pattern);
System.out.println(isMatch); // 输出:true
1.3 预定义字符类
Java正则表达式提供了一些预定义的字符类,如\d
表示任意数字,\w
表示任意字母、数字或下划线。
String pattern = "\\d\\w";
String text = "1a";
boolean isMatch = text.matches(pattern);
System.out.println(isMatch); // 输出:true
2. 量词
量词用于指定一个模式的重复次数。
2.1 基本量词
*
:零次或多次+
:一次或多次?
:零次或一次
String pattern = "\\d+";
String text = "12345";
boolean isMatch = text.matches(pattern);
System.out.println(isMatch); // 输出:true
2.2 贪婪与非贪婪
默认情况下,量词是贪婪的,会尽可能多地匹配字符。通过在量词后加上 ?
可以使其变为非贪婪。
String pattern = "a+?b";
String text = "aaab";
boolean isMatch = text.matches(pattern);
System.out.println(isMatch); // 输出:true
3. 分组与捕获
分组允许将多个字符当作一个单元进行处理,并可通过捕获获得匹配的子串。
String pattern = "(\\d+)-(\\w+)";
String text = "123-abc";
Pattern regex = Pattern.compile(pattern);
Matcher matcher = regex.matcher(text);
if (matcher.matches()) {
System.out.println("Number: " + matcher.group(1)); // 输出:Number: 123
System.out.println("Text: " + matcher.group(2)); // 输出:Text: abc
}
4. 边界匹配
边界匹配用于限定匹配发生的位置。
4.1 ^
和 $
^
表示匹配字符串的开头,$
表示匹配字符串的结尾。
String pattern = "^\\d{3}$";
String text = "123";
boolean isMatch = text.matches(pattern);
System.out.println(isMatch); // 输出:true
4.2 \b
和 \B
\b
表示单词边界,\B
表示非单词边界。
String pattern = "\\bword\\b";
String text = "wording";
boolean isMatch = text.matches(pattern);
System.out.println(isMatch); // 输出:false
5. 替换与分割
除了匹配,正则表达式还常用于替换和分割字符串。
5.1 替换
String pattern = "\\s+";
String text = "Hello World";
String replacedText = text.replaceAll(pattern, " ");
System.out.println(replacedText); // 输出:Hello World
5.2 分割
String pattern = ",";
String text = "apple,orange,banana";
String[] parts = text.split(pattern);
for (String part : parts) {
System.out.println(part);
}
// 输出:
// apple
// orange
// banana
6.常用正则表达式
当使用正则表达式时,常用的一些模式可以帮助你快速匹配和处理文本。以下是一些常见的正则表达式示例:
-
匹配整数:
String integerPattern = "^\\d+$";
-
匹配浮点数:
String floatPattern = "^\\d+\\.\\d+$";
-
匹配邮箱地址:
String emailPattern = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$";
-
匹配URL:
String urlPattern = "^(https?|ftp)://[\\w-]+(\\.[\\w-]+)+([/?].*)?$";
-
匹配日期(YYYY-MM-DD):
String datePattern = "^\\d{4}-\\d{2}-\\d{2}$";
-
匹配手机号码:
String phonePattern = "^1[3456789]\\d{9}$";
-
匹配身份证号码(18位):
String idCardPattern = "^\\d{17}(\\d|X|x)$";
-
匹配IP地址:
String ipPattern = "^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$";
-
匹配HTML标签:
String htmlTagPattern = "<([a-zA-Z]+)\\b[^>]*>.*?</\\1>";
-
匹配中文字符:
String chinesePattern = "[\\u4e00-\\u9fa5]";
这些正则表达式模式可以用作基础模板,根据具体需求进行调整。在使用正则表达式时,始终要考虑目标字符串的实际情况,以确保匹配的准确性。
结论
Java正则表达式是处理字符串匹配、替换和分割的重要工具。通过学习正则表达式的基础语法和常用模式,你可以更高效地处理文本数据。希望本文的详细介绍和示例能够帮助你更好地理解和应用Java正则表达式。
评论区