Java.util.regex是正则表达式所定制的模式进行匹配的工作的类库包。它包括两个类:Pattern类和Matcher类。Pattern是正则表达式经变异后的表现模式,Matcher对象是一个状态机器,它依据Pattern对象作为匹配模式对字符串展开匹配检查。
捕获组可以通过从左到右计算其开括号来编号,编号是从1 开始的。例如,在表达式 ((A)(B©))中,存在四个这样的组:
((A)(B©))
(A)
(B©)
©
Pattern类用于创建一个正则表达式,也可以说创建一个匹配模式,它的构造方法是私有的,不可以直接创建,但可以通过Pattern.complie(String regex)简单工厂方法创建一个正则表达式,
Pattern pattern= Pattern.compile("\\w+");
//匹配规则
String pattern1 = pattern.pattern();
System.out.println(pattern1);
/*运行结果:
\w+
*/
Pattern pattern= Pattern.compile("\\d+");
String[] split = pattern.split("我的QQ是:456456我的电话是:0532214我的邮箱是:[email protected]");
for (String str : split) {
System.out.println(str);
}
/*运行结果:
我的QQ是:
我的电话是:
我的邮箱是:[email protected]
*/
下面开始使用Matcher类
matches是一个静态函数
boolean flag1 = Pattern.matches("\\d+", "12345");
boolean flag2 = Pattern.matches("\\d+", "12345a");
System.out.println(flag1);
System.out.println(flag2);
/*运行结果:
我的QQ是:
我的电话是:
我的邮箱是:[email protected]
*/
Matcher类的构造方法也是私有的,不能随意创建,只能通过Pattern.matcher()函数得到实例
Pattern pattern= Pattern.compile("\\d+"); Matcher matcher=pattern.matcher("22bb23"); Pattern pattern1 = matcher.pattern();//返回值pattern,返回创建Matcher对象的pattern对象
Pattern pattern=Pattern.compile("\\d+");
Matcher matcher=pattern.matcher("22bb23");
Matcher matcher1=pattern.matcher("aa2233");
Matcher matcher2=pattern.matcher("aabb");
//matches()函数:对整个字符串匹配,只有整个字符串匹配,返回true
boolean flag1=matcher.matches();//返回false
boolean flag2=matcher1.matches();//返回true
//find()函数:对整个字符串匹配,匹配的字符串可以在任何位置,返回true
boolean flag3=matcher.find();//返回true
boolean flag4=matcher1.find();//返回true
boolean flag5=matcher2.find();//返回false
//lookingAt()函数:对整个字符串匹配,只有匹配的字符串在最前面,返回true
boolean flag6=matcher.lookingAt();//返回true
boolean flag7=matcher1.lookingAt();//返回false
Pattern pattern=Pattern.compile("([a-z]+)(\\d+)");
Matcher matcher=pattern.matcher("aa2233bb");
int conut=matcher.groupCount();//返回值为2,2组一个括号为1个组
int start = matcher.start(1);//返回值为0
int end = matcher.end(1);//返回值为2
String group = matcher.group(1);//返回值为aa
每次执行匹配后start(),end(),group()三个方法的值都会改变,改变成匹配到的子字符串信息,以及他们的重载信息。
只有匹配成功的时候,才能使用group(),start(),end()三个方法,否则抛出Java.lang.illegalState/Exception
Pattern pattern=Pattern.compile("\\d+");
Matcher matcher=pattern.matcher("我的QQ是:456456 我的电话是:0532214 我的邮箱是:[email protected]");
while (matcher.find()){
System.out.println("str:"+matcher.group());
System.out.println("start:"+matcher.start());
System.out.println("end:"+matcher.end());
}
/*运行结果:
str:456456
start:6
end:12
str:0532214
start:19
end:26
str:123
start:36
end:39
*/
匹配中文
Pattern pattern=Pattern.compile("[\u4e00-\u9fa5]+");
Matcher matcher=pattern.matcher("你好");