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方法(用法与上面差不多)