语法
| 字符 | 含义 |
|---|---|
| \ | 将下一字符标记为特殊字符 |
| ^ | 匹配开始 |
| $ | 匹配结束 |
| * | 0次或多次匹配前面的字符 |
| + | 1次或多次匹配前面的字符 |
| ? | 0次或1次匹配前面的字符,跟在其它限定符后匹配尽可能段的字符串(非贪心) |
| {n} | 匹配n次 |
| {n,} | 至少匹配n次 |
| {n,m} | 匹配n~m次 |
| (pattern) | 匹配组 |
| x|y | 匹配x或y |
| [xyz] | 字符集,匹配任一字符 |
| [^xyz] | 反向字符集,匹配不包含的字符 |
| [a-z] | 匹配小写字母 |
| \d | 匹配数字 |
| \n | 匹配换行符 |
| \r | 匹配回车符 |
| \s | 匹配任何空白字符 |
| \w | 匹配任何字类字符 |
java.util.regex
Pattern
判断是否匹配
boolean isMatch = Pattern.matches(regex, text);
Matcher
捕获组
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(text);
if (matcher.find()) {
System.out.println(matcher.group());
} else {
System.out.println("NOT FOUND");
}
示例:
// 通过()来建立分组
String regex = "https://github\\.com/(\\w+)/(.*)";
String text = "https://github.com/wch853/jianshu";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(text);
if (matcher.find()) {
for (int i = 0; i <= matcher.groupCount(); i++) {
/**
* 通过group(int group);来捕获组
* group(); / group(0); 捕获所有
* group(i)捕获第i个分组
*/
System.out.println("group:" + i + ": " + matcher.group(i));
}
} else {
System.out.println("NOT FOUND");
}