94java正则表达式(java.util.regex开发包)

104 阅读3分钟

【第09个代码模型】正则表达式(java.util.regex开发包)


一、java.util.regex开发包

JDK1.4里面增加的开发包就是java.util.regex,但是在这个包里面只有两个类:Pattern类、Matcher类。

Pattern负责编译正则,而Matcher负责进行匹配正则。如果要做的是一般的处理,实际上不需要使用到这两个类,只需要使用String即可。

就是说如果只是做简单的验证匹配,不需要用到这两个类,但如果想要弄更多的东西就必须用java.util.regex开发包。

二、观察Patten类中的方法:

找到java.util.regex里的Patten往下拉到最后会发现里面没有构造方法,但是里边有一个compile点开里边有一串

public static Pattern compile(String regex)。

 

所以:

Pattern取得实例化对象必须通过

public static Pattern compile(String regex);对我们的正则先进行编译,这是正则的标准使用过程。

 

完成之后找到split,而且这个地方是CharSequence,看到CharSequence就应该能想到字符串。

  • 拆分字符串:public String[ split(CharSequence input )

Pattern类还有个方法是找到matcher,有一串

public Matcher matcher(CharSequence input )这个叫

  • 取得matcher类对象:

public Matcher matcher(CharSequence input )

 

范例:通过Pattern进行zifuchuan拆分

 

 

String str=这里跟上“a|b|c”,然后string regex=“[a-z]”进行拆分。

跟上Pattern pat=Pattern.compile(regex):在跟上String result[ ] =pat.split(),for循环for(int x=o,x<result.length; x ++){system.out.prinyln(result[x])};如下:

 

执行出现错误

应该String regex=“\|”执行出现:

a

b

C

 

 

三、Matcher负责进行正则匹配:

点开Matcher找到matches,

  • 字符串:public boolean matches ( ) 

现在Pattern有了拆分,Matches有了匹配,还差一个替换。所以在列表里找到replaceall里 

  • 全部替换:public String replaceAll(String replacement)

再往下找到replaceFirst打开找到

  • 替换首个:
  • public String replaceFirst(String replacement)

 

范例:匹配

在上述基础上,修改成String str=“100” String regex=”\d+” 后面Matcher mat=pat.matcher(str);之后跟上

system.out.println(mat.matches());

 

如下:

执行出现true。

在进行一些复杂的正则操作里面,String类是完成不了的,必须通过Matcher类里面,因为这里有一个分组的概念。

 

以后会经常遇到一个框架,会出现很多代码:

String str="INSERT INTO member(mid, name, age) VALUES (#{member . mid} , #{member .name}, #{member .age}).

VALUES在这表示要追加的内容。

 

现在要求把{member . mid}、{member .name}、{member .age}这些内容取出来,之前的操作都不好用了,必须通过Matcher做分组操作,方法是;

首先先把可能出现的格式固定:String regex=”#{member.mid}”;

这里{}是敏感字符,所以\进行转移。

这时候字母、数字、\都有可能转移,所以

String regex=”#\{a-zA-Z 0-9\}”; 这是分组的依据。接下来对Matcher mat = pat . matcher(str) ;  System. out . println(mat . matches()); 进行分组。

 

根据匹配原则写while(mat.find()),这里是以此进行比较,如果符合则取出内容。{ system.out.println(mat.group(0)) };

如下:按0取,每一个取一次。

 

String regex=“#\{[a-zA-Z 0-9\.]\}”;这里]取多次所以加+:String regex=“#\{[a-zA-Z 0-9\.]+\}”;

 

执行出现:

#{member.mid}

#{member.name}

#{member.age}

 

这是以后接触到的框架的设计原理,但是通过这个代码至少要理解基本上开发中最为常用的正则都在String类中有所定义了,而一些复杂的操作才会使用到Matcher、Pattern类来进行,但这种情况比较少见。