1、Java 正則表達式中的Quantifiers(量詞)使用來指定匹配字符出現的次數的,java api中有三種Quantifiers: greedy, reluctant, and possessive。雖然三種quantifiers的作用很相似(見下表),但是三者還是有區別的。(摘自
java.sun.com)
Quantifiers | ?Meaning |
?Greedy |
?Reluctant |
?Possessive |
?X? |
?X?? |
?X?+ |
?X , once or not at all |
?X* |
?X*? |
?X*+ |
?X , zero or more times |
?X+ |
?X+? |
?X++ |
?X , one or more times |
?X{n} |
?X{n}? |
?X{n}+ |
?X , exactly n times |
?X{n,} |
?X{n,}? |
?X{n,}+ |
?X , at least n times |
?X{n,m} |
?X{n,m}? |
?X{n,m}+ |
?X , at least n but not
more than m times |
2、幾個例子(摘自
java.sun.com)

greedy quantifiers
Enter?your?regex:?a?
Enter?input?string?to?search:?
I?found?the?text?""?starting?at?index?0?and?ending?at?index?0.
Enter?your?regex:?a*
Enter?input?string?to?search:?
I?found?the?text?""?starting?at?index?0?and?ending?at?index?0.
Enter?your?regex:?a+
Enter?input?string?to?search:?
No?match?found.
Zero-Length Matches (1)
Enter?your?regex:?a?
Enter?input?string?to?search:?a
I?found?the?text?"a"?starting?at?index?0?and?ending?at?index?1.
I?found?the?text?""?starting?at?index?1?and?ending?at?index?1.
Enter?your?regex:?a*
Enter?input?string?to?search:?a
I?found?the?text?"a"?starting?at?index?0?and?ending?at?index?1.
I?found?the?text?""?starting?at?index?1?and?ending?at?index?1.
Enter?your?regex:?a+
Enter?input?string?to?search:?a
I?found?the?text?"a"?starting?at?index?0?and?ending?at?index?1.
Zero-Length Matches (2)
Enter?your?regex:?a?
Enter?input?string?to?search:?aaaaa
I?found?the?text?"a"?starting?at?index?0?and?ending?at?index?1.
I?found?the?text?"a"?starting?at?index?1?and?ending?at?index?2.
I?found?the?text?"a"?starting?at?index?2?and?ending?at?index?3.
I?found?the?text?"a"?starting?at?index?3?and?ending?at?index?4.
I?found?the?text?"a"?starting?at?index?4?and?ending?at?index?5.
I?found?the?text?""?starting?at?index?5?and?ending?at?index?5.
Enter?your?regex:?a*
Enter?input?string?to?search:?aaaaa
I?found?the?text?"aaaaa"?starting?at?index?0?and?ending?at?index?5.
I?found?the?text?""?starting?at?index?5?and?ending?at?index?5.
Enter?your?regex:?a+
Enter?input?string?to?search:?aaaaa
I?found?the?text?"aaaaa"?starting?at?index?0?and?ending?at?index?5.
Zero-Length Matches (3)
Enter?your?regex:?a?
Enter?input?string?to?search:?ababaaaab
I?found?the?text?"a"?starting?at?index?0?and?ending?at?index?1.
I?found?the?text?""?starting?at?index?1?and?ending?at?index?1.
I?found?the?text?"a"?starting?at?index?2?and?ending?at?index?3.
I?found?the?text?""?starting?at?index?3?and?ending?at?index?3.
I?found?the?text?"a"?starting?at?index?4?and?ending?at?index?5.
I?found?the?text?"a"?starting?at?index?5?and?ending?at?index?6.
I?found?the?text?"a"?starting?at?index?6?and?ending?at?index?7.
I?found?the?text?"a"?starting?at?index?7?and?ending?at?index?8.
I?found?the?text?""?starting?at?index?8?and?ending?at?index?8.
I?found?the?text?""?starting?at?index?9?and?ending?at?index?9.
Enter?your?regex:?a*
Enter?input?string?to?search:?ababaaaab
I?found?the?text?"a"?starting?at?index?0?and?ending?at?index?1.
I?found?the?text?""?starting?at?index?1?and?ending?at?index?1.
I?found?the?text?"a"?starting?at?index?2?and?ending?at?index?3.
I?found?the?text?""?starting?at?index?3?and?ending?at?index?3.
I?found?the?text?"aaaa"?starting?at?index?4?and?ending?at?index?8.
I?found?the?text?""?starting?at?index?8?and?ending?at?index?8.
I?found?the?text?""?starting?at?index?9?and?ending?at?index?9.
Enter?your?regex:?a+
Enter?input?string?to?search:?ababaaaab
I?found?the?text?"a"?starting?at?index?0?and?ending?at?index?1.
I?found?the?text?"a"?starting?at?index?2?and?ending?at?index?3.
I?found?the?text?"aaaa"?starting?at?index?4?and?ending?at?index?8.
exactly n number of times
Enter?your?regex:?a{3}
Enter?input?string?to?search:?aa
No?match?found.
Enter?your?regex:?a{3}
Enter?input?string?to?search:?aaa
I?found?the?text?"aaa"?starting?at?index?0?and?ending?at?index?3.
Enter?your?regex:?a{3}
Enter?input?string?to?search:?aaaa
I?found?the?text?"aaa"?starting?at?index?0?and?ending?at?index?3.
at least n times
Enter?your?regex:?a{3,}
Enter?input?string?to?search:?aaaaaaaaa
I?found?the?text?"aaaaaaaaa"?starting?at?index?0?and?ending?at?index?9.
an upper limit
Enter?your?regex:?a{3,6}?//?find?at?least?3?(but?no?more?than?6)?a's?in?a?row
Enter?input?string?to?search:?aaaaaaaaa
I?found?the?text?"aaaaaa"?starting?at?index?0?and?ending?at?index?6.
I?found?the?text?"aaa"?starting?at?index?6?and?ending?at?index?9.
Capturing Groups with Quantifiers
Enter?your?regex:?(dog){3}
Enter?input?string?to?search:?dogdogdogdogdogdog
I?found?the?text?"dogdogdog"?starting?at?index?0?and?ending?at?index?9.
I?found?the?text?"dogdogdog"?starting?at?index?9?and?ending?at?index?18.
Enter?your?regex:?dog{3}
Enter?input?string?to?search:?dogdogdogdogdogdog
No?match?found.
Character Class with Quantifiers
Enter?your?regex:?[abc]{3}
Enter?input?string?to?search:?abccabaaaccbbbc
I?found?the?text?"abc"?starting?at?index?0?and?ending?at?index?3.
I?found?the?text?"cab"?starting?at?index?3?and?ending?at?index?6.
I?found?the?text?"aaa"?starting?at?index?6?and?ending?at?index?9.
I?found?the?text?"ccb"?starting?at?index?9?and?ending?at?index?12.
I?found?the?text?"bbc"?starting?at?index?12?and?ending?at?index?15.
Enter?your?regex:?abc{3}
Enter?input?string?to?search:?abccabaaaccbbbc
No?match?found.