您的位置:首页 > 编程语言 > Java开发

JAVA正常表达式精通之路(mathes,find,lookingAt,group)

2014-04-30 14:19 204 查看
小结:

public boolean matches()

尝试将整个区域与模式匹配。当前仅单整个区域是模式匹配的时候才会匹配



例如:

Pattern p = Pattern.compile("\\d{3,5}");

String s = "1237632";

Matcher m = p.matcher(s);

对于整个模式而言,并非3到5个数字,所以会返回false,同时会截掉5个数字(按照多的来)

测试发现如果不断的做p.matcher(s)操作,还是返回true,经过分析认为

p.matcher执行多次等效于执行1次,且只会截一次

若不想受到matcher()截断影响,可以使用m.reset()方法恢复

m.find则从开始位置找子序列,找到返回true,通过group()方法返回匹配的子序列,且按照多的来,就是能5个不3个

测试发现会受到matcher()截断影响

lookingAt每次都从开始位置找,测试发现并没有收到matcher()截断影响

group()获取和整个模式匹配的内容

group(0):表示把模式拆分为多个组,而第0个组就是整个模式,所以等效于group

group(1):表示模式拆分为多个组,第二个模式组所匹配的内容


以上结论结合了下文的实验测试所得,需要今后使用过程中不断完善!

下文参考:http://jingbo2759.blog.163.com/blog/static/983753152009811111619136/

直接看例子

public static void main(String[] args)

{

Pattern p = Pattern.compile("\\d{3,5}");

String s = "123-34345-234-00";

Matcher m = p.matcher(s);//注意,matcher是全局匹配.这里明显是不匹配.但是,由于s里面的"123"和p是匹配的,所以他会将这三个数字去掉.下次调用匹配方法的时候,是将剩余的字符串来继续匹配

p(m.matches());

m.reset();//重新设置到最开始..如果这里没有这一步,下面的匹配将受到影响...

p(m.find());//find方法是部分匹配..也就是说,只要找到有匹配的字符段就算匹配...但是,他和matcher方法一样也会将s里面已经匹配的字符去掉....这里匹配的是"123"

p(m.find());//剩余的字符"-34345-234-00"继续匹配.匹配的是"34345"

p(m.find());//剩余字符"-234-00"继续匹配.匹配的是"234"

p(m.find());//剩余字"-00"符继续匹配.已经没有匹配的字符,所以这个方法不匹配.

p(m.lookingAt());//lookingAt方法也是部分匹配,但是他都是从最开始进行匹配...所以每次都是匹配"123"

p(m.lookingAt());

p(m.lookingAt());

p(m.lookingAt());

}

public static void p(Object o)

{

System.out.println(o);

}

总结一下,matches方法和find方法会造成冲突,记得要调用reset方法...所以使用的时候要特别注意.

还有start和end方法..这两个方法写在find方法后..比如这样

p(m.find());

p(m.start()+"-"+m.end());

p(m.find());

p(m.start()+"-"+m.end());

p(m.find());

p(m.start()+"-"+m.end());

p(m.find());

start方法访问的是开始匹配的问题.注意,end方法返回的是最后匹配位置的下一个位置
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: