正则表达式本身就是一个字符串,用一个正则表达式来匹配另一个或另一组字符串
预定义字符类
. 任意字符(与行结束符可能匹配也可能不匹配)
\d 数字:[0-9]
\w 单词字符:[a-zA-Z_0-9]
边界匹配器
^ 行开头
$ 行结尾
数量:
X? 一次或0次
X* 0次或多次(包括1次)
X+ 一次或多次
X{n} 恰好n次
X{n, } 至少n次
X{n,m} 至少n次,不超过m次
正则表达式四种常用方法:
匹配
在java中,“”里面的\表示特殊含义,所以需要使用两个\来表示\,
//qq邮箱
String email = "damon@qq.com";
String reg2 = "\\w+@[qQ]{2}\\.com";
b = email.matches(reg2);
System.out.println(b);
拆分
System.out.println("-----------拆分----------");
String content = "hello I am Lilei, welcome to java";
String[] contents = content.split("[, ]");
System.out.println(contents.length);
for(String s : contents){
System.out.println(s);
}
这两个都不需要借助正则表达式相关类,可以直接借助String内部包含的match方法完成。
正则表达式相关类Pattern(模式),Match(匹配)
可以将一个正则表达式对象与多名需要匹配的对象进行匹配,或者仅使用一次。如果仅使用一次,则直接使用pattern的match静态方法,否则就调用pattern的静态方法compile创建一个pattern对象,使之与多个匹配器匹配
//java中正则表达式有关的类,Pattern(模式) Matcher
System.out.println("---------Pattern------Match------------");
//1将正则表达式对象编译成Pattern对象
Pattern p = Pattern.compile("a+b");//引号内是正则表达式,表示1到多个a,一个b
//2 调用matcher方法返回匹配器,一个模式对象可以对应多个匹配器对象
Matcher m = p.matcher("aaaaaaaaaaaaaaaaaaab");
Matcher m2 = p.matcher("aaab");
//3 调用匹配器的matches完成匹配
boolean b3 = m.matches();
System.out.println(b3);
//4 如果只调用一次匹配器
boolean b4 = Pattern.matches("a*b", "aaaaaaaaab");
System.out.println(b4);
获取:
String con = "java是世界上最好的语言,Java真棒,JAVA牛";
String reg3 = "([jJ]ava)|(JAVA)";//使用|表示或
Pattern p2 = Pattern.compile(reg3);
Matcher matcher = p2.matcher(con);
while(matcher.find()){
System.out.print(matcher.group() + " ");
}
输出结果为
java Java JAVA
替换
//4 替换
String con2 = con.replaceAll(reg3, "php");
System.out.println(con2);
//扩展案例,将其改造为一句没用重复和标点的话
String say1 = "我我我我我我我我我我,,。喜喜喜喜。。欢欢欢欢。欢欢,编编编编程";
String say01 = "我我。喜欢喜欢喜欢喜欢编程编程编程";
//1 替换
String say2 = say1.replaceAll("[\\.\\。\\,]", "");
String say3 = say2.replaceAll("(.)\\1+","$1");
String say4 = say01.replaceAll("(.)(.)(\\1\\2)+", ("$1$2")).
replaceAll("(.)\\1", "$1").replaceAll("。", "");
System.out.println(say4);
System.out.println(say3);