java的pattern类和matcher类的使用详解

来源:互联网 发布:腾讯云 centos pptp 编辑:程序博客网 时间:2024/05/16 00:40

 Java 的Pattern类和matcher类的使用

 

   java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包。它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表现模式。 Matcher 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查。首先一个Pattern实例订制了一个所用语法与PERL的类似的正则表达式经编译后的模式,然后一个Matcher实例在这个给定的Pattern实例的模式控制下进行字符串的匹配工作。

   1.Pattern类用于创建一个正则表达式,也可以说创建一个匹配模式,它的构造方法是私有的,不可以直接创建,但可以通过Pattern.complie(Stringregex)简单工厂方法创建一个正则表达式, 
Java代码示例: 

Pattern p=Pattern.compile("\\bb+");

p.pattern();//返回 \bb+

 

pattern() 返回正则表达式的字符串形式,其实就是返回Pattern.complile(String regex)的regex参数

 

2.Pattern.split(CharSequence input) 
Pattern有一个split(CharSequenceinput)方法,用于分隔字符串,并返回一个String[],我猜String.split(String regex)就是通过Pattern.split(CharSequence input)来实现的. 
Java代码示例: 


Pattern p=Pattern.compile("\\d+"); 
String[] str=p.split("我的QQ是:456456我的电话是:0532214我的邮箱是:aaa@aaa.com"); 

结果:str[0]="我的QQ是:" str[1]="我的电话是:"str[2]="我的邮箱是:aaa@aaa.com" 

 

3.指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建Matcher对象,依照正则表达式,该对象可以与任意字符序列匹配。执行匹配所涉及的所有状态都驻留在匹配器中,所以多个匹配器可以共享同一模式。

 

因此,典型的调用顺序是


 Pattern p = Pattern.compile("a*b");

 Matcher m = p.matcher("aaaaab");

 boolean b = m.matches();

在仅使用一次正则表达式时,可以方便地通过此类定义 matches 方法。此方法编译表达式并在单个调用中将输入序列与其匹配。语句

 boolean b = Pattern.matches("a*b","aaaaab");


等效于上面的三个语句,尽管对于重复的匹配而言它效率不高,因为它不允许重用已编译的模式。

 

4.说了这么多,终于轮到Matcher类登场了 Pattern.matcher(CharSequenceinput)返回一个Matcher对象. 
Matcher类的构造方法也是私有的,不能随意创建,只能通过Pattern.matcher(CharSequence input)方法得到该类的实例. 

Pattern类只能做一些简单的匹配操作,要想得到更强更便捷的正则匹配操作,那就需要将Pattern与Matcher一起合作.Matcher类提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持. 

 
Matcher
类提供三个匹配操作方法, Matcher.matches()/Matcher.lookingAt()/ Matcher.find() ,三个方法均返回boolean类型,当匹配到时返回true,没匹配到则返回false 

 

(1)matches()对整个字符串进行匹配,只有整个字符串都匹配了才返回true 

(2)lookingAt()对前面的字符串进行匹配,只有匹配到的字符串在最前面才返回true 

(3)find()对字符串进行匹配,匹配到的字符串可以在任何位置. 

 

5.Mathcer.start()/ Matcher.end()/Matcher.group() 
当使用matches(),lookingAt(),find()执行匹配操作后,就可以利用以上三个方法得到更详细的信息. 
start()返回匹配到的子字符串在字符串中的索引位置. 
end()返回匹配到的子字符串的最后一个字符在字符串中的索引位置. 
group()返回匹配到的子字符串 

   注意:只有当匹配操作成功,才可以使用start(),end(),group()三个方法,否则会抛出java.lang.IllegalStateException,也就是当matches(),lookingAt(),find()其中任意一个方法返回true时,才可以使用.

0 0