一、Greedy(贪婪的)尽可能多的匹配,Reluctant(不情愿的)尽可能少的匹配。Possessive(独占的)不常用。
| 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 次 |
例如:
import java.util.regex.*; public class Test{ public static void main(String args[]){ //Pattern p = Pattern.compile("(.{3,10})[0-9]");//输出0 9 //Pattern p = Pattern.compile("(.{3,10}?)[0-9]");//输出0 5 Pattern p = Pattern.compile("(.{3,10}+)[0-9]");//输出not match! String s = "aaaa5bbb6"; Matcher m = p.matcher(s); if(m.find()){ System.out.println(m.start()+" "+m.end()); } else{ System.out.println("not match!"); } } }
二、除了?=,其他一般不用
Pattern p = Pattern.compile("java",Pattern.CASE_INSENSITIVE);
等价于:Pattern p = Pattern.compile("(?i)java");
| 特殊构造(非捕获) | |
|---|---|
| (?:X) | X,作为非捕获组 |
| (?idmsux-idmsux) | Nothing,但是将匹配标志i d m s u x on - off |
| (?idmsux-idmsux:X) | X,作为带有给定标志 i d m s u x on - off |
| (?=X) | X,通过零宽度的正 lookahead |
| (?!X) | X,通过零宽度的负 lookahead |
| (?<=X) | X,通过零宽度的正 lookbehind |
| (?<!X) | X,通过零宽度的负 lookbehind |
| (?>X) | X,作为独立的非捕获组 |
import java.util.regex.*; public class Test{ public static void main(String args[]){ Pattern p = Pattern.compile(".{3}");//输出444 a66 //Pattern p = Pattern.compile(".{3}(?=a)");//输出444 //Pattern p = Pattern.compile("(?=a).{3}");//输出a66 //Pattern p = Pattern.compile(".{3}(?!a)");//输出44a 66b //Pattern p = Pattern.compile("(?!a).{3}");//输出444 66b //Pattern p = Pattern.compile(".{3}(?<!a)");//输出444 a66 //Pattern p = Pattern.compile(".{3}(?<=a)");//输出44a String s = "444a66b"; Matcher m = p.matcher(s); while(m.find()){ System.out.println(m.group()); } } }
三、
| Back 引用 | |
|---|---|
| n | 任何匹配的 nth 捕获组 |
import java.util.regex.*; public class Test{ public static void main(String args[]){ Pattern p = Pattern.compile("(\d\d)\1");//与group(1)相同 String s = "1212"; Matcher m = p.matcher(s); System.out.println(m.matches());//true p = Pattern.compile("(\d(\d))\2");//与group(2)相同 s = "12"; m = p.matcher(s); System.out.println(m.matches());//false p = Pattern.compile("(\d(\d))\2");//与group(2)相同 s = "122"; m = p.matcher(s); System.out.println(m.matches());//true } }