信心比金钱更重要!

目标明确==>>>计划跟踪==>>>行动执行!
posts - 41, comments - 3, trackbacks - 0, articles - 2
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

正则表达式三种数量词

Posted on 2012-03-23 09:53 luofeng 阅读(398) 评论(1)  编辑 收藏 引用 所属分类: Android基础


正则表达式三种数量词
  

Greedy 数量词   (贪婪的)!【每次取最多,不成,往出吐个,再试】! 
X?    X,一次或一次也没有 
X*    X,零次或多次X+X,一次或多次 
X{n}    X,恰好 n 次 
X{n,}    X,至少 n 次 
X{n,m}    X,至少 n 次,但是不超过 m 次 
Reluctant 数量词   (不情愿的,勉强的!【每次取最少,不成,吸入一个,再试】! 
X??    X,一次或一次也没有 
X*?    X,零次或多次 
X+?    X,一次或多次 
X{n}?    X,恰好 n 次X 
{n,}?    X,至少 n 次 
X{n,m}?    X,至少 n 次,但是不超过 m 次 
Possessive 数量词   (独占的)  !【每次取最多,不吐】! 
X?+    X,一次或一次也没有 
X*+    X,零次或多次 
X++    X,一次或多次 
X{n}+    X,恰好 n 次 
X{n,}+    X,至少 n 次 
X{n,m}+    X,至少 n 次,但是不超过 m 次

1 Matcher m=Pattern.compile("a.*b")
2               .matcher("a====b=========b=====");
3 while(m.find()){
4       System.out.println(m.group());
5         }
6 
7 
8 输出:
9 a====b=========b
因为总是从最大 匹配开始匹配,故称贪婪。

Reluctant正好和Greedy相反,它先从最小匹配开始,先从左端吞入一个字符,然后进行匹配,若不匹配就再吞入一个字符,直到找到匹配或将整个字符串吞入为止。
1 Matcher m=Pattern.compile("a.*?b")
2                   .matcher("a====b=========b=====");
3 while(m.find()){
4         System.out.println(m.group());
5         }
6 
7 输出:
8 a====b

Possessive和Greedy的匹配方式一样,先把整个字符串吞下,然后匹配整个字符串,如果匹配,就认为匹配,如果不匹配,就认为整个字符串不匹配,它不会从右端吐出一个字符串再进行匹配,只进行一次
1 Matcher m=Pattern.compile("a.*+b")
2                    .matcher("a====b=========b=====");
3 while(m.find()){
4     System.out.println(m.group());
5         }
6 
7 输出:
8 (无输出)

*******************
我的理解是
String text = "a====b=========b";
String reg = "a.*+b";
由于.代表任意字符,字母b和=都算匹配到了模式中(.*+),最后 "a.*+b"中的b没有找到匹配字符,所以不匹配。
如果这样:
String text = "a54564b";
String reg = "a\\d*+b";
"a54564b"中字母b不能吸收进“\\d*+”,最后匹配结果是true。

Feedback

# re: 正则表达式三种数量词  回复  更多评论   

2012-10-19 09:45 by 小羔羊
我想问下 Pattern.compile("a.*+b") 里面的a后面的"."是什么意思

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理