1.java中正则表达式的使用方法和C#中有点不一样,他分为两个类:Pattern和Mather,前者用来编译正则表达式,
Pattern对象是正则编译后再内存中存放的表示形式,再用Pattern对象生成对应的模式匹配器,将所有的结果都存放在模式匹配器中,通过模式匹配器提供的方法如:
matches,find进行自己需要的操作
例子:
public static void main(String[] args) { // TODO Auto-generated method stub Pattern p=Pattern.compile("ab"); //正则表达式先编译成对应的Pattern模式 Matcher m=p.matcher("ab"); //用模式生成模式匹配器,在m中存放的是所有的匹配信息 boolean b=m.matches(); System.out.println(b); }
上面的例子也可通过: boolean b2=Pattern.matches("ab", "abc");一步搞定,但是考虑到有的匹配模式可能需要重复使用,所以在单一使用的情况下,可以直接采用Parttern.matches(parttern,char sequence)这种模式
2.Matcher的简单使用:m.find(),m.end,m.start,m.group
public static void main(String[] args) { // TODO Auto-generated method stub Pattern p=Pattern.compile("\w+"); //模式 Matcher m=p.matcher("java is very easy"); //模式匹配器 while(m.find()) //找到匹配字符串 { System.out.println(m.start()+"--"+m.end()+":"+m.group());//输出位置和内容 } int i=0; while(m.find(i)) //从第i开始查找 { System.out.println(m.group()); i++; } }
3.聚焦m.reset(char sequence) 方法:重置模式匹配器重的待字符串
public static void main(String[] args) { // TODO Auto-generated method stub String [] emailArray={"fangjian@qq.com","fjsnail@sina.com","jackvin@mail.com","www.baidu.com"}; Pattern p=Pattern.compile("^\w+@(qq|sina|mail).com$"); Matcher m=null; for(String str:emailArray) { m=p.matcher(str); System.out.println(str+"---"+(m.matches()?"is a email":"is not a email")); } System.out.println("-------m.reset test-------------"); for(String str:emailArray) { if(m==null) m=p.matcher(str); //模式不变,判断模式匹配器是否为空,空就说明还没有放字符串进去 else m.reset(str); //模式匹配器非空,说明这次上次比较的模式匹配器,需要换字符串,生成新的模式匹配器 System.out.println(str+"---"+(m.matches()?"is a email":"is not a email")); } }
4.m.find()和m.lookat()比较
String charsquence="www.baidu.com.cn"; Pattern p2=Pattern.compile("^\w."); Matcher m=p2.matcher(charsquence); System.out.println(m.lookingAt()); //true 只要在字符中有一个匹配就算成功 System.out.println(m.find()); //flase 字符必须完全匹配
5.在matcher中还提供了replaseAll,replaceFirst,split方法(用法与上面差不多)