一、前言
Java中的正则表达式是一种强大的文本处理工具,它允许你通过特定的模式来匹配、查找、替换或验证字符串。Java的正则表达式功能通过java.util.regex
包提供,其中Pattern
类表示编译后的正则表达式,而Matcher
类则用于对输入字符串进行匹配操作。
二、正则表达式的基础
- 字符类:如
.
(匹配任意字符)、\d
(匹配数字)、\w
(匹配字母或数字或下划线)等。 - 数量词:如
*
(匹配0次或多次)、+
(匹配1次或多次)、?
(匹配0次或1次)、{n}
(匹配n次)、{n,}
(匹配n次或更多次)、{n,m}
(匹配n到m次)等。 - 锚点:如``(匹配字符串的开始)、
$
(匹配字符串的结束)、\b
(匹配单词边界)等。 - 分组和捕获:用
()
来分组,捕获的组可以通过反向引用进行访问,如\1
、\2
等表示第一、第二个捕获组。 - 或操作:用
|
表示“或”的关系。 - 转义字符:在正则表达式中,某些字符具有特殊含义,如果要匹配这些字符本身,需要使用
\
进行转义,如\.
匹配点字符。
三、Java中的正则表达式类
-
Pattern类:
Pattern.compile(String regex)
:将给定的正则表达式编译成一个模式。Pattern.matcher(CharSequence input)
:创建一个匹配器,用于将输入序列与该模式进行匹配。
-
Matcher类:
boolean matches()
:尝试将整个区域与模式匹配。boolean lookingAt()
:尝试从输入序列的开头开始匹配模式。boolean find()
:尝试在输入序列中查找与该模式匹配的下一个子序列。int start()
/int end()
:返回当前匹配的起始和结束索引。String group()
/String group(int group)
:返回由之前的匹配操作所匹配的输入子序列,或指定组的子序列。
四、常见应用场景
- 校验输入:使用正则表达式来校验用户输入的格式,如邮箱地址、电话号码、身份证号码等。
- 文本搜索:在大量文本中搜索符合特定模式的字符串,如查找所有包含特定单词的句子。
- 文本替换:将文本中符合特定模式的字符串替换为其他字符串,如将文本中的所有数字替换为星号。
- 字符串分割:根据正则表达式来分割字符串,如将逗号分隔的字符串分割为数组
五、示例代码
以下是一个简单的Java正则表达式示例,用于验证一个字符串是否为有效的电子邮件地址:
java">import java.util.regex.Pattern;
import java.util.regex.Matcher;public class RegexExample {public static void main(String[] args) {// 定义电子邮件地址的正则表达式模式String regex = "[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+$";// 编译正则表达式Pattern pattern = Pattern.compile(regex);// 要匹配的输入字符串String input = "example@example.com";// 创建匹配器Matcher matcher = pattern.matcher(input);// 进行匹配操作并输出结果if (matcher.matches()) {System.out.println("有效的电子邮件地址!");} else {System.out.println("无效的电子邮件地址!");}}
}
以下是一个简单的示例,演示如何使用Java正则表达式来匹配字符串中的数字:
java">import java.util.regex.Matcher;
import java.util.regex.Pattern;public class RegexExample {public static void main(String[] args) {// 定义正则表达式模式String regex = "\\d+";// 编译正则表达式模式Pattern pattern = Pattern.compile(regex);// 要匹配的输入字符串String input = "The number is 12345 and the other number is 67890.";// 获取Matcher对象Matcher matcher = pattern.matcher(input);// 查找并打印所有匹配的数字while (matcher.find()) {System.out.println("Found number: " + matcher.group());}}
}
以下是一个简单的示例,演示如何使用Java正则表达式来验证电话号码:
java">import java.util.regex.Matcher;
import java.util.regex.Pattern;public class PhoneNumberValidator {private static final String PHONE_NUMBER_REGEX = "^1[34578]\\d{9}$";public static boolean validatePhoneNumber(String phoneNumber) {Pattern pattern = Pattern.compile(PHONE_NUMBER_REGEX);Matcher matcher = pattern.matcher(phoneNumber);return matcher.matches();}public static void main(String[] args) {String phoneNumber = "13800138000";boolean isValid = validatePhoneNumber(phoneNumber);System.out.println("电话号码是否有效: " + isValid);}
}
以下是一个简单的示例,演示如何使用Java正则表达式来验证身份证号码:
java">import java.util.regex.Matcher;
import java.util.regex.Pattern;public class IDCardValidator {// 15位身份证正则表达式private static final String IDCARD15_REGEX = "^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$";// 18位身份证正则表达式private static final String IDCARD18_REGEX = "^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}(\\d|X|x)$";public static boolean isValidIDCard(String idCard) {Pattern pattern15 = Pattern.compile(IDCARD15_REGEX);Pattern pattern18 = Pattern.compile(IDCARD18_REGEX);Matcher matcher15 = pattern15.matcher(idCard);Matcher matcher18 = pattern18.matcher(idCard);return matcher15.matches() || matcher18.matches();}public static void main(String[] args) {String idCard = "11010519491231002X";boolean isValid = isValidIDCard(idCard);System.out.println("身份证号码是否有效: " + isValid);}
}