正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,模式描述在搜索文本时要匹配的一个或多个字符串。它是有穷自动机的符号化,能够对指定字符串进行有规则的匹配。下面来介绍正则表达式在Java编程中的一些应用
一、在split()中应用正则表达式
1、对于不规律分隔的字符串的切割获取
//对指定字符串进行切割
public static void fun_0(){
String str = "zhangsan lisi wangwu mazi";
String arr [] = str.split(" +");
for(int i = 0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
//结果:zhangsan lisi wangwu mazi
}
二、在matches()中应用正则表达式
1、验证中国大陆区域手机号
//验证手机号是否正确
public static void fun_1(){
String tel_num = "18870996532";
System.out.println(tel_num.matches("1[3458]\\d{9}"));
}
2、验证中国大陆区域电子邮箱
//验证中国大陆邮箱
public static void fun_4(){
String email = "kbx_6955@163.com.cn";
System.out.println(email+":"+email.matches("\\w+@[0-9a-zA-Z]+(\\.[a-zA-Z]{2,3}){1,3}"));
//结果:kbx_6955@163.com.cn:true
}
三、在replaceAll()中应用正则表达式
1、删除叠词
//删除叠词(连续且相同的词)
public static void fun_3(){
//此类情况属于多次替换
String str = "我我我要要好好好好学习习习";
str = str.replaceAll("(.)\\1+","$1");
System.out.println(str);
//结果:我要好学习
}
2、实现手机号的隐私处理
//实现手机号码的隐私处理
public static void fun_2(){
//进行该操作首先要保证手机号码长度合格!
/*<1>在相同字符串中复用组“\\1”,在不同字符串中复用组“$1”(都表示复用第一组)
*<2>对于组来说,在同一字符串中复用组使用“\\x”实现,此时复用组所匹配的与组第一次匹配的字符串相同
*(在replaceAll中会出现这种情况,replaceAll是替换字符串中符合规则的所用字符串)因为组第一次匹
*配替换并没有停止所以复用时会将第一次匹配的字符串与当前字符串进行直接匹配,只存在一次替换是会发生
*此类情况,多次替换时不会发生此类情况
* */
//此类情况属于单次替换
//String tel_num = "18870997099"; //结果:188****7099
//tel_num = tel_num.replaceAll("(\\d{3})(\\d{4})\\2", "$1****$2");
//String tel_num = "18870992588"; //结果:18870992588
//tel_num = tel_num.replaceAll("(\\d{3})(\\d{4})\\2", "$1****$2");
String tel_num = "18870992588"; //结果:188****2588
tel_num = tel_num.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
System.out.println(tel_num);
}
四、获取到字符串中符合规范的词
1、实现指定规则字符串的获取
//实现指定规则的字符串获取
public static void fun_5(){
/*用到正则表达式对象 java.util.regex.Pattern;
*<1>将正则表达式封装到Pattern对象中 Pattern p = Pattern.compile(regex);
*<2>将正则规范通过匹配器作用到字符串上并使用正则对象进行接收 Matcher m = p.matcher(str);
*<3>通过匹配器方法对字符串进行匹配 boolean flag = m.matches();
* */
String str = "ski 124,fddf/drr$5258";
//取出三个字符组成的字符串
String regex = "\\b[a-zA-Z0-9]{3}\\b";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
while(m.find()){
System.out.print(m.group()+" ");
}
//结果:ski 124 drr
}
在字符串中多数操作都是基于正则对象的,正则表达式因为阅读性较差所以在String类将正则方法进行了抽离变成了相应的方法,提高编程的阅读性,对于简单固定而少量的字符串操作适合使用正则表达式来实现,例如表单数据的合法性验证、非法文字的过滤、网络爬虫等应用。