- 普通字符
普通字符代表它们自身,用于精确匹配字符串中的字符。例如,a 匹配字符 a,1 匹配数字 1。 - 元字符
元字符是具有特殊含义的字符,用于匹配特定类型的字符或字符串模式。
常用元字符
. :匹配除换行符以外的任意单个字符。例如,a.c 可以匹配 abc、a1c 等。
^ :匹配字符串的开始位置。例如,^abc 只匹配以 abc 开头的字符串。
$ :匹配字符串的结束位置。例如,abc$ 只匹配以 abc 结尾的字符串。
* :匹配前面的元素零次或多次。例如,ab*c 可以匹配 ac、abc、abbbc 等。
+ :匹配前面的元素一次或多次。例如,ab+c 可以匹配 abc、abbbc 等,但不能匹配 ac。
? :匹配前面的元素零次或一次。例如,ab?c 可以匹配 ac 或 abc。
{n} :匹配前面的元素恰好 n 次。例如,a{3} 只匹配 aaa。
{n,} :匹配前面的元素至少 n 次。例如,a{3,} 可以匹配 aaa、aaaa 等。
{n,m} :匹配前面的元素至少 n 次,但不超过 m 次。例如,a{3,5} 可以匹配 aaa、aaaa、aaaaa。
| :或运算符,匹配两个或多个模式中的任意一个。例如,a|b 可以匹配 a 或 b。
() :分组,用于将多个元素组合成一个单元,并可以对分组应用量词或其他操作。例如,(ab)+ 可以匹配 ab、abab 等。 - 字符类
字符类用于匹配一组字符中的任意一个。
常用字符类
[ ]:匹配方括号内的任意一个字符。例如,[abc] 可以匹配 a、b 或 c。
[^ ]:匹配不在方括号内的任意一个字符。例如,[^abc] 可以匹配除 a、b、c 以外的任意字符。
[a-z]:匹配任意小写字母。
[A-Z]:匹配任意大写字母。
[0-9]:匹配任意数字。
[a-zA-Z0-9]:匹配任意字母或数字。 - 预定义字符类
预定义字符类是一些常用字符类的缩写。
常用预定义字符类
\d:等价于 [0-9],匹配任意数字。
\D:等价于 [^0-9],匹配任意非数字字符。
\w:等价于 [a-zA-Z0-9_],匹配任意字母、数字或下划线。
\W:等价于 [^a-zA-Z0-9_],匹配任意非字母、数字或下划线的字符。
\s:匹配任意空白字符,包括空格、制表符、换行符等。
\S:匹配任意非空白字符。 - 边界匹配
边界匹配用于匹配字符串中的特定位置。
常用边界匹配
\b:匹配单词边界,即单词与非单词字符之间的位置。例如,\bcat\b 只匹配独立的单词 cat,而不匹配 category 中的 cat。
\B:匹配非单词边界。 - 贪婪与非贪婪匹配
贪婪匹配:默认情况下,量词(如 *、+、{n,} 等)是贪婪的,即尽可能多地匹配字符。例如,a.b 会匹配从第一个 a 到最后一个 b 之间的所有字符。
非贪婪匹配:在量词后面加上 ? 可以将其变为非贪婪匹配,即尽可能少地匹配字符。例如,a.?b 会匹配从第一个 a 到最近的一个 b 之间的字符。