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方法返回的是最后匹配位置的下一个位置
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方法返回的是最后匹配位置的下一个位置
相关文章推荐
- java正则表达式方法的使用matches,find,lookingAt,replaceAll,group
- 正则表达式--find和lookingAt方法
- JAVA正则表达式,matcher.find()和 matcher.matches()的区别
- Java入门到精通——调错篇之Spring2.5利用aspect实现AOP时报错: error at ::0 can't find referenced pointcut XXX 分类: Java从
- Java程序员:一刻钟精通正则表达式
- java正则表达式 match、find匹配位置
- java正则表达式中Group的理解
- Java正则表达式组group()的用法
- 正则表达式的捕获组(capture group)在Java中的使用
- Java正则表达式之Matcher类的find和matches方法的区别
- Java程序员:一刻钟精通正则表达式
- java 正则表达式find的一些小探究
- JAVA正则表达式,matcher.find()和 matcher.matches()的区别
- Java正则表达式的Group
- java关于正则相关的函数的应用--compile(),match(),find(),group(),
- Java程序员:一刻钟精通正则表达式
- JAVA正则表达式,matcher.find()和 matcher.matches()的区别
- JAVA正则表达式group用法
- Java入门到精通——调错篇之Spring2.5利用aspect实现AOP时报错: error at ::0 can't find referenced pointcut XXX
- Java程序员:一刻钟精通正则表达式