正则表达式学习笔记

   在看api文档时,不小心留意到这一部分的内容,那它们是什么意思呢?又有什么作用呢?

  在不懂什么意思的情况下,借助了伟大的google翻译才得到这几个词的意思,Greedy是贪婪的,贪心的;Reluctant是勉强的;Possessive是占有的,所有权的;经过仔细观察又可以看出Reluctant相对Greedy是在量词后多了个?,Possessive相对Greedy是在量词后多了个+。后又了解了原来正则表达式还有贪婪模式、非贪婪模式(也叫勉强模式、懒惰模式、惰性模式)和独占模式。而Greedy就是贪婪模式的数量词,Reluctant就是非贪婪模式的数量词,Possessive就是独占模式的数量词。

各模式的特点

  a. 量词

   在我们写正则表达式时,默认书写的就是贪婪模式,接下来我们来看看属于贪婪模式的量词有哪些。

   *,+,?,{m,n},{m,},{m}这些都是贪婪模式的量词,又叫匹配优先量词。在这些量词后添加上?就是非贪婪模式的量词,在这些量词后添加上+就是独占模式的量词。

   b. 匹配规则

    贪婪模式的匹配规则:尽可能的匹配最多的元素,匹配整个字符串,不满足的话回退一个接着匹配;

    非贪婪模式的匹配规则:尽可能的匹配最少的元素,匹配时从第一个字符开始,不满足的话加一个字符;

    独占模式的匹配规则:尽可能的匹配最多的元素,匹配整个字符串,尝试一次仅且一次匹配成功,不满足的话不回退;

 1 String str = "tom is chasing jerry and tom will soon catch jerry";
 2         Pattern c1 = Pattern.compile("tom.*");
 3         Pattern c2 = Pattern.compile("tom.*?");
 4         Matcher m1 = c1.matcher(str);
 5         Matcher m2 = c2.matcher(str);
 6         System.out.println("m1的匹配结果;");
 7         while(m1.find()){
 8             System.out.print(m1.group());
 9         }
10         System.out.println("\r\nm2的匹配结果:");
11         while (m2.find()) {
12             System.out.print(m2.group()+" ");
13         }
View Code

运行结果:

 

1 String str1 = "abbcdefbbc";
2 Pattern c3 = Pattern.compile(".*+bbc");
3 Matcher m3 = c3.matcher(str1);
4 System.out.println("\r\n"+m3.matches());
View Code

    

posted @ 2017-05-18 20:58  守明  阅读(157)  评论(0编辑  收藏  举报