JAVA正则表达式:Pattern和Matcher

来源:互联网 发布:软件项目管理填空 编辑:程序博客网 时间:2024/05/26 14:12
java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包。 

1.简介: 

java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包。 
它包括两个类:Pattern和Matcher 。 

Pattern: 一个Pattern是一个正则表达式经编译后的表现模式。 

Matcher: 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查。 

首先一个Pattern实例订制了一个所用语法与PERL的类似的正则表达式经编译后的模式,然后一个Matcher实例在这个给定的Pattern实例的模式控制下进行字符串的匹配工作。 

以下我们就分别来看看这两个类: 


2.Pattern类: 

Pattern的方法如下: 

static Pattern compile(String regex) 
  将给定的正则表达式编译并赋予给Pattern类 
static Pattern compile(String regex, int flags) 
  同上,但增加flag参数的指定,可选的flag参数包括:CASE INSENSITIVE,MULTILINE,DOTALL,UNICODE CASE, CANON EQ 
int flags() 
  返回当前Pattern的匹配flag参数. 
Matcher matcher(CharSequence input) 
  生成一个给定命名的Matcher对象 
static boolean matches(String regex, CharSequence input) 
  编译给定的正则表达式并且对输入的字串以该正则表达式为模开展匹配,该方法适合于该正则表达式只会使用一次的情况,也就是只进行一次匹配工作,因为这种情况下并不需要生   成一个Matcher实例。 
String pattern() 
  返回该Patter对象所编译的正则表达式。 
String[] split(CharSequence input) 
  将目标字符串按照Pattern里所包含的正则表达式为模进行分割。 
String[] split(CharSequence input, int limit) 
  作用同上,增加参数limit目的在于要指定分割的段数,如将limi设为2,那么目标字符串将根据正则表达式分为割为两段。 

一个正则表达式,也就是一串有特定意义的字符,必须首先要编译成为一个Pattern类的实例,这个Pattern对象将会使用matcher()方法来生成一个Matcher实例,接着便可以使用该 Matcher实例以编译的正则表达式为基础对目标字符串进行匹配工作,多个Matcher是可以共用一个Pattern对象的。 

现在我们先来看一个简单的例子,再通过分析它来了解怎样生成一个Pattern对象并且编译一个正则表达式,最后根据这个正则表达式将目标字符串进行分割: 

import java.util.regex.*; 

public class Replacement{ 
public static void main(String[] args) throws Exception { 
// 生成一个Pattern,同时编译一个正则表达式 
Pattern p = Pattern.compile("[/]+"); 
//用Pattern的split()方法把字符串按"/"分割 
String[] result = p.split( 
"Kevin has seen《LEON》seveal times,because it is a good film." 
+"/ 凯文已经看过《这个杀手不太冷》几次了,因为它是一部" 
+"好电影。/名词:凯文。"); 
for (int i=0; i<result.length; i++) 
System.out.println(result[i]); 



输出结果为: 
Kevin has seen《LEON》seveal times,because it is a good film. 
凯文已经看过《这个杀手不太冷》几次了,因为它是一部好电影。 
名词:凯文。 

很明显,该程序将字符串按"/"进行了分段。 

我们以下再使用 split(CharSequence input, int limit)方法来指定分段的段数,程序改动为: 
tring[] result = p.split("Kevin has seen《LEON》seveal times,because it is a good film./ 凯文已经看过《这个杀手不太冷》几次了,因为它是一部好电影。/名词:凯文。",2); 
这里面的参数"2"表明将目标语句分为两段。 
输出结果则为: 
Kevin has seen《LEON》seveal times,because it is a good film. 
凯文已经看过《这个杀手不太冷》几次了,因为它是一部好电影。/名词:凯文。 
0 0
原创粉丝点击