说明:学习正则表达式其实就是在学习一些特殊符号的使用。
正则表达式:符合一定规则的表达式,
作用:用于专门操作字符串。
特点:用于一些特定的符号来表示一些代码操作,这样可以简化书写。
一,匹配。
通过String中的matches(String regex)方法来判断字符串是否符合规则,匹配则返回true。
示例1:匹配QQ号码
规则:
长度在5-11为之间,都为数字。
第一位不能为0,
public class Test {
public static void main(String[] args) throws Exception{
//定义规则
String regex="[1-9]\\d{4,10}";
String qq1="274559585";
String qq2="1234";
String qq3="0123456";
String qq4="123456789";
//匹配规则
boolean b1=qq1.matches(regex);
boolean b2=qq2.matches(regex);
boolean b3=qq3.matches(regex);
boolean b4=qq4.matches(regex);
System.out.println(b1);
System.out.println(b2);
System.out.println(b3);
System.out.println(b4);
}
}
运行结果:
true
false
false
true
示例2:匹配手机号码。
规则:
都为数字;
长度11;
第一位为1;
第二为可以为3、5、8中一位。
public class Test {
public static void main(String[] args) throws Exception{
//定义规则
String regex="1[358]\\d{9}";
String qq1="13912345678";
String qq2="1234567890";
String qq3="000111222";
String qq4="15001099585";
//匹配规则
boolean b1=qq1.matches(regex);
boolean b2=qq2.matches(regex);
boolean b3=qq3.matches(regex);
boolean b4=qq4.matches(regex);
System.out.println(b1);
System.out.println(b2);
System.out.println(b3);
System.out.println(b4);
}
}
运行结果:
true
false
false
true
二,切割
方法:
String类中的split(regex);
按照符合规则的子串来切割字符串。
示例1:根据字符串中任意数字或数字串来分割字符串。
public class Test {
public static void main(String[] args) throws Exception{
//定义规则
String regex="\\d+";
String s="afsa1ryh22rhrh86hdhfgh44tyiky";
//匹配规则
String[] str=s.split(regex);
for(String ss:str){
System.out.println(ss);
}
}
}
运行结果:
afsa
ryh
rhrh
hdhfgh
tyiky
示例2:根据重复的字母来切割字符串
public class Test {
public static void main(String[] args) throws Exception{
//定义规则
String regex="(.)\\1+";
String s="afsaa1ryh22rhrhh86hdhttfgh44tykkkiky";
//匹配规则
String[] str=s.split(regex);
for(String ss:str){
System.out.println(ss);
}
}
}
运行结果:
afs
1ryh
rhr
86hdh
fgh
ty
iky
三,替换
方法:
String类中replaceAll(String regex,String replacement)。
将该字符串中符合规则的子串替换成指定的字符串。
示例1:
将字符串中的叠词变为单个
public class Test {
public static void main(String[] args) throws Exception{
String s="nnnihhhhaooshhijiiie";
//匹配规则
String str=s.replaceAll("(.)\\1+","$1");
System.out.println(str);
}
}
运行结果:
nihaoshijie
示例2:
去除字符串中的空格
public class Test {
public static void main(String[] args) throws Exception{
String s=" h e ll o ,j a v a ";
//匹配规则
String str=s.replaceAll(" +","");
System.out.println(str);
}
}
运行结果:
hello,java
四,获取
将字符串中符合规则的子串取出;
操作步骤:
1.将正则表达式封装成对象;
2,让正则对象和要操作的字符串想关联;
3,,关联后获取正则匹配引擎;
4,通过引擎对符合规则的子串进行操作:比如取出。
示例1:获取字符串中的叠词
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) throws Exception{
String s="aaasddfgggghjjkllll";
//定义规则
String regex="(.)\\1+";
//将规则封装成对象
Pattern p=Pattern.compile(regex);
//将正则对象和要操作的字符串想关联,并获取匹配器对象m
Matcher m=p.matcher(s);
//将规则作用到字符串上,并进行符合规则的子串查找。
//找到符合规则的字符子串则返回true。
while(m.find()){
//获取符合规则的子串
System.out.println(m.group());
}
}
}
运行结果:
aaa
dd
gggg
jj
llll
五,常见应用:匹配邮箱
判断一个邮件地址是否为合法的邮件地址
public class Test {
public static void main(String[] args) throws Exception{
String s1="afjwofief";
String s2="123@sina.com";
String s3="zxc@qwe";
//定义规则
String regex="\\w+@\\w+(\\.\\w+)+";
System.out.println(s1.matches(regex));
System.out.println(s2.matches(regex));
System.out.println(s3.matches(regex));
}
}
运行结果;
false
true
false