语法
字符 | 含义 |
---|---|
\ | 将下一字符标记为特殊字符 |
^ | 匹配开始 |
$ | 匹配结束 |
* | 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");
}