【第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类来进行,但这种情况比较少见。