正则表达式用于匹配指定规则的字符串
测试字符串是否匹配正则表达式:
public static void main(String[] args) {
String s = "a";//目标字符串
String regex = "[abc]";//正则表达式
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(s);
System.out.println(m.matches());
}
限定符:
| 字符 | 用法 | 示例 | 匹配字符串 |
| ? | 匹配0或1次 | ab?c | abc、ac |
| * | 匹配0或多次 | ab*c | ac、abc、abbbc |
| + | 匹配至少1次 | ab+c | abc、abbc |
| {n} | 匹配恰好n次 | ab{2}c | abbc |
| {n,} | 匹配至少n次 | ab{2,}c | abbc、abbbc |
| {n,m} | 匹配次数在n到m之间,包括n,m | ab{2,4}c | abbc、abbbbc |
"或"运算:
| 字符 | 用法 | 示例 | 匹配字符串 |
| | | 或运算 | ab(c|d) | abc、abd |
字符类:
| 字符 | 用法 | 示例 | 匹配字符串 |
| () | 分组,()内为一个整体 | a(bc)*d | ad、abcbcd |
| [] | 匹配的字符只能从方括号中取 | [abc] | a、b、c |
| [n-m] | 同上,同时匹配字符从n到m中取 | [a-z] | a、f、n |
| [^] | 取 ^ 后字符以外的字符 | [^a-z] | 除小写字母以外皆可 |
元字符(注意Java中需使用转义字符,如"\d"需写成"\\d"):
| 字符 | 用法 | 示例 | 匹配字符串 |
| \d | 数字字符 | \d+ | 123 |
| \D | 非数字字符,同[^0-9] | \D | a、_ |
| \w | 英文、数字、下划线 | \w+ | a1_2b |
| \W | 非(英文、数字、下划线)字符 | \W | 1 |
| \s | 空白符(包含Tab和换行符) | \s | (空格) |
| \S | 非空白符 | \S | a、1 |
| . | 代表除换行符外的任意字符 | .+ | ab_123 |
| ^a | 匹配首字符为a的字符串(不能单用,要配合使用) | ^ab+c | abbc |
| a$ | 匹配尾字符为a的字符串(同上) | ab*c$ | ac、abbbc |
断言(匹配的内容不包括断言部分,即(?=<body>).*匹配到的字符串仅是.*):
| 字符 | 用法 | 示例 | 匹配字符串 |
| (?=pattern) | 正向先行断言,该位置左侧的字符序列能匹配该pattern | .*(?=<title>) | abc<title> |
| (?!pattern) | 负向先行断言,该位置左侧的字符序列不能匹配该pattern | .*(?!<title>) | abc<lr> |
| (?<=pattern) | 正向后行断言,该位置右侧的字符序列能匹配该pattern | (?<=<title>).* | <title>abc |
| (?<!pattern) | 负向后行断言,紧接该位置之前的字符序列不能匹配该pattern | (?<!<title>).* | <lr>abc |
贪婪匹配、惰性匹配与支配匹配:
贪婪匹配(Greediness):在整个表达式匹配成功的提前下,尽可能多的匹配,默认
惰性匹配(Laziness):与贪婪匹配相反,尽可能少的匹配,在末尾加?
支配匹配(Possessive):只尝试匹配整个字符串,在末尾加+
本文详细介绍了正则表达式的各种元素及其用法,包括限定符、或运算、字符类以及元字符等,并提供了丰富的示例帮助理解。

被折叠的 条评论
为什么被折叠?



