JAVA正则表达式精通之路2

来源:互联网 发布:人工智能外文参考文献 编辑:程序博客网 时间:2024/05/17 14:28

Greedy 数量词X?X,一次或一次也没有X*X,零次或多次X+X,一次或多次X{n}X,恰好 nX{n,}X,至少 nX{n,m}X,至少 n 次,但是不超过 m 次 Reluctant 数量词X??X,一次或一次也没有X*?X,零次或多次X+?X,一次或多次X{n}?X,恰好 nX{n,}?X,至少 nX{n,m}?X,至少 n 次,但是不超过 m 次 Possessive 数量词X?+X,一次或一次也没有X*+X,零次或多次X++X,一次或多次X{n}+X,恰好 nX{n,}+X,至少 nX{n,m}+X,至少 n 次,但是不超过 m

Greedy:贪婪的

 Pattern p = Pattern.compile("\\d{3,5}");
          String s = "123753re";
          Matcher m = p.matcher(s);
          System.out.println(m.find());
          System.out.println(m.group());

返回12375

Reluctant:勉强的

     Pattern p = Pattern.compile("\\d{3,5}?");
          String s = "123753re";
          Matcher m = p.matcher(s);
          System.out.println(m.find());
          System.out.println(m.group());

返回123

Possessive:占有的

 Pattern p = Pattern.compile("\\d{3,5}+");
          String s = "123753re";
          Matcher m = p.matcher(s);
          System.out.println(m.find());
          System.out.println(m.group());

返回的是12375,从结果可以看出来占用模式也是贪婪的,按照多的来,下文资料显示,占用模式是一种提供运行效率的做法

数量表示符

"数量表示符(quantifier)"的作用是定义模式应该匹配多少个字符。
  • Greedy(贪婪的): 除非另有表示,否则数量表示符都是greedy的。Greedy的表达式会一直匹配下去,直到匹配不下去为止。(如果发现表达式匹配的结果与预期的不符),很有可能是因为它是greedy的,因此会一直匹配下去。
  • Reluctant(勉强的): 用问号表示,它会匹配最少的字符。也称为lazy, minimal matching, non-greedy, 或ungreedy。
  • Possessive(占有的): 目前只有Java支持。它更加先进,所以你可能还不太会用。用正则表达式匹配字符串的时候会产生很多中间状态,(一般的匹配引擎会保存这种中间状态,)这样匹配失败的时候就能原路返回了。占有型的表达式不保存这种中间状态,因此也就不会回头重来了。它能防止正则表达式的失控,同时也能提高运行的效率。
0 0
原创粉丝点击