Java正则表达式函数解析与应用
Java正则表达式是Java语言内置的一种字符串匹配工具,其可以帮助我们非常方便、快捷地完成字符串匹配、替换等操作。在Java中使用正则表达式主要依赖两个类:Pattern和Matcher。在本文中,我们将详细介绍这两个类的使用方法,并且讲解如何进行正则表达式匹配、替换及校验等操作。
一、Pattern类
定义:
Pattern是正则表达式的编译表示。Pattern类没有公共构造方法。要创建一个Pattern对象,你必须首先调用其公共静态编译方法,它会返回一个Pattern对象。该方法接受一个正则表达式参数,并将其编译为一个Pattern对象。如果正则表达式不合法,该方法将抛出一个PatternSyntaxException异常。
示例:
String regex = "^\\d+$";
Pattern pattern = Pattern.compile(regex);
参数:
可以使用Pattern类的各种方法获取一些有用的信息,例如,可以使用pattern()方法获取编译好的Pattern,可以使用flags()方法获取编译时的标志,可以使用toString()方法获取正则表达式的字符串表示。
Pattern类的常用方法:
1. boolean matches(String regex, CharSequence input):
该方法以正则表达式和输入的字符序列作为参数,返回一个boolean值,表示正则表达式是否匹配输入的字符序列。
示例:
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher("Hello222World");
System.out.println(matcher.matches());
输出:
false
2. String[] split(CharSequence input,int limit):
该方法以输入的字符序列和可选的限制值作为参数,并返回一个字符串数组,其中的元素被输入序列分隔符匹配分割。
示例:
Pattern pattern = Pattern.compile("\\d+");
String[] arr = pattern.split("1a2b3c4d5e", 3);
for (String s : arr) {
System.out.println(s);
}
输出:
a
b3c4d5e
3. Matcher matcher(CharSequence input):
该方法以输入的字符序列作为参数,返回一个Matcher对象,匹配该输入序列和此模式的匹配。
示例:
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher("Hello222World");
System.out.println(matcher.find());
输出:
true
二、Matcher类
定义:
Matcher类是正则表达式以及输入字符串的操作类,Matcher对象只包含共通操作。Matcher类没有公共构造方法。要创建一个Matcher对象,首先必须通过Pattern对象的matcher方法获得。
示例:
String regex = "^\\d+$";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher("123456");
参数:
Matcher类也提供了各种方法,例如,可以使用group()方法获取匹配的子序列,可以使用matches()方法判断是否匹配,可以使用replaceAll()方法替换所有匹配的子序列,等等。
Matcher类的常用方法:
1. boolean matches():
该方法返回布尔值,表示整个字符串是否和正则表达式匹配。
示例:
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher("Hello222World");
System.out.println(matcher.matches());
输出:
false
2. boolean find():
该方法返回一个布尔值,表示是否找到了下一个子序列,即是否存在下一个匹配的子串。
示例:
Pattern pattern = Pattern.compile("\\d");
Matcher matcher = pattern.matcher("Hello222World");
System.out.println(matcher.find());
输出:
true
3. String group():
该方法返回一个字符串,表示匹配到的子序列。
示例:
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher("Hello222World");
while (matcher.find()) {
System.out.println(matcher.group());
}
输出:
222
4. String replaceAll(String replacement):
该方法将输入字符串中匹配到的子字符串用参数replacement所代表的字符串替换。
示例:
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher("Hello222World");
System.out.println(matcher.replaceAll("ABC"));
输出:
HelloABCWorld
三、应用实例
1. 匹配身份证号码
示例:
public static boolean isIDCard(String idCard) {
String regex = "(\\d{15})|(\\d{17}[a-zA-Z0-9])";
return Pattern.matches(regex, idCard);
}
2. 匹配手机号码
示例:
public static boolean isPhoneNum(String phoneNum) {
String regex = "^1[3-9]\\d{9}$";
return Pattern.matches(regex, phoneNum);
}
3. 替换敏感字符
示例:
public static String replaceSensitiveWords(String str) {
String regex = "操|草|傻|逼";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
return matcher.replaceAll("***");
}
综上所述,Java正则表达式是一个非常强大的字符串处理工具,可以帮助我们方便快捷地实现字符串匹配、替换、校验等操作。在日常开发中,熟练掌握正则表达式的使用方法可以极大地提高程序员的工作效率。
