1、正则表达式概述:
首先是表达式,是一种正确的规则去进行某一种是事物的操作,用于对字符串进行操作的表达式,用于对字符串进行的操作
好处:代码更为简洁、提供了一些符号来表示一些规则,其实这个规则内部还是有具体的代码来完成对字符串操作。简单说:好像是将代码进行封装、用符号进行了替代。
弊端:正因为是符号表示的,所以要记住很多符号的使用,而且符号多了阅读性极差。
eg:对QQ号码进行校验
要求:1、必须是5到15位。
2、必须是数字
3、0不可以开头
String qq="178266871";
String regex="[1-9][0-9]{4,14}";这就是规则,作用在字符串上的规则。
Boolean b=qq.matches(regex);
2、正则表达式常见体现:
其实就是一些常见符号的注解,必须要了解,学习正则,其实就是在学习这些符号的使用。
字符类:
[abc]:要是a或者b或者c
[^bac]:除了abc什么都行
[a-zA-Z]必须是字母
[a-b[m-p]]:a到b或者m到p
预定义字符:
.:任何字符,与行结束符可能匹配也可能不匹配
\d:数字[0-9]它是一个符号,不要以为是两个符号,不是转义。
\D:非数字[^0-9]
\s:空白字符
\S:非空白
\w:单词字符,[a-zA-Z_0-9]字符数字下划线
\W:非单词
边界匹配器:
\b:单词边界
数量词
X?:一次或者一次也没有
X*:没有或有多次
X+:必有有一次或者多次
X{n}:恰好n次
X{n,}:至少n次
X{n,m}:n到m次之间
3、正则表达式常用的功能:(重点)
1、匹配:
其实是用的就是String类中的matches方法,将正则作用到指定的字符串上判断该字符串是否符合规则,返回真假。
public static void checkTel(){
String tel="13802920021";
Boolean b=tel.matches(regex);
String regex="1[358][0-9]{9}";
//String regex="1[358]\\d{9}";
}
注意:在字符串中单\代表的是转义字符,所以为了保持原样必须把它表示原样性用\\来表示。
2、切割:
其实就是使用的是String类中的split方法,将字符串按照指定的规则,变成一个字符数组,凡是参数是regex都是正则。
Eg:切割字符串
public static void splitString(){
String str="lisi.wangwu.zhaoliu";
String regex="\\.";
String[] arr=str.split(regex);
for(String s:arr){
System.out.println(s);
}
}
3、替换:
其实用的是String类中的replaceAll()方法
str="acdxxxxxxshdsYYYYsdahj";叠词替换成一个字
str=str.replaceAll("(.)\\1+","$1");
4、获取:
其实就是使用了正则表达式对象,java.util.Pattern.
1、先将正则表达式编译成Pattern对象
2、将Pattern对象将和要匹配的字符串关联,获取对应的匹配器对象。
Matcher
3、通过匹配器对象Matcher对字符串进行操作了。
public static void getString(){
String str="da jia zhu yi le,ming tian bufang jia";
String regex="\\b[a-z]{3}\\b";\b:单词边界
Pattern p=Pattern,compile(regex);
p.mecther(str);
Matcher m=p.matcher(str);
While(m.find){
System.out.println(.m.group);//group方法可以返回查找到的子序列、
}
}