含义:就是记录文本的规则的代码,是一种用于文本匹配的工具,是一个匹配表达式比起通配符?和*,正则表达式更能精确的描述你的需求。
正则表达式只要涉及API中的:java.util.reges包中的Pattern类和Matcher类。
Pattern:java中专门进行正则表达式编译的类(即一个实例就是代表正则表达式本身)
Matcher:通过解释Patter,对字符串序列执行匹配操作的引擎(用来判断是否匹配)
常用的匹配:
1、内容
. :匹配出换行符以外的任意字符
\w :匹配字母或者数字或下划线(\W匹配其他字符)
\s :匹配任意的空白符
\d :匹配数字
\b :匹配单词的开始或者结束
^ :匹配字符串的开始
$ :匹配字符串的结束
2.次数
X? | X,一次或一次也没有 |
X* | X,零次或多次 |
X+ | X,一次或多次 |
X{n} | X,恰好 n 次 |
X{n,} | X,至少 n 次 |
X{n,m} | X,至少 n 次,但是不超过 m 次 |
[] :中括号表示可选
典型的调用方式是:
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
关于正则表达式的测试:
public class Pattern1 {
@Test
public void Demo1(){
//字符串匹配
String str="011-123456";
//匹配原则:一个0,加两个数,一个减号,后面是6个数组
boolean mc=str.matches("0\\d{2}-\\d{6}");
System.out.println(mc);//true
str="011-123456789";
mc=str.matches("0\\d{2}-\\d{6}");
System.out.println(mc);//false,因为String是一种完全匹配
str="老干妈";
//匹配原则:老后面可以接零个或者多个字符。
mc=str.matches("老.*");
}
@Test
public void Demo2(){
String str="011-123456";
//Pattern:java中专门进行正则表达式编译的类
Pattern p=Pattern.compile("0\\d{2}-\\d{6}");
//Matcher:通过解释Patter,对字符串序列执行匹配操作的引擎(用来判断是否匹配)
Matcher mc=p.matcher(str);//匹配成功
//这里和String匹配不一样String是完全匹配而,这里是部分匹配。
}
@Test
public void Demo3(){
String str="1-1112-2223-3334-4445-5556";
Pattern p=Pattern.compile("\\d-\\d{3}");
Matcher mc=p.matcher(str);
String res="";
while(mc.find()){//find相当于指针
res=mc.group();
System.out.println(res);
/*1-111
2-222
3-333
4-444
5-555*/
}
//也可以指定位置
mc.find(2);
res=mc.group();
System.out.println(res);//2-222
}
}