| 字符 | 含义 |
|---|---|
| \n | 换行符 |
| \r | 回车 |
| \s | 匹配任何空白字符,包括空格、制表符、换页符等等 |
| \S | 匹配任何非空白字符 |
| $ | 匹配输入字符串的结尾位置,比如 abc$ 可以匹配到 123abc
|
| ^ | 匹配输入字符串的开始位置,但在方括号中使用,表示除去表达式中的字符。例 ^abc 可以匹配 abc123,[^abc] 可以匹配 bcdef
|
| . | 匹配任何 单个字符 (除新行符 (\r\n) 外) |
| * | 匹配 零个或多个 前面的字符。.* 是匹配范围最广的模式之一, 因为它可以匹配零个或多个任意字符 |
| + | 匹配 一个或多个 前面的字符 |
| ? | 匹配 零个或一个 前面的字符,可以理解为前面的字符是可选的。例 a(bc)? 可以匹配 axxxx 或者 abcxxxxx |
| {n} | 精确匹配n次 |
| {n,} | 匹配最少n次 |
| {n,m} | 匹配n到m次 |
| [...] | [abc] 表示 "a, b, c 的中任何一个字符"。使用破折号来创建范围,例如[a-z] 表示 "在小写字母 a 和 z (包含的) 之间的任何一个字符"。 列表和范围可以组合在一起,例如 [a-zA-Z0-9_] 表示 "字母, 数字或下划线中的任何一个字符"。^用在方括号里表示排除 |
| \d | 匹配任意一个数字 (相当于类 [0-9]) |
| \w | 匹配任意一个字母数字下划线,等同于 [a-zA-Z0-9_] |
| \b | 代表着单词的开头或结尾,也就是单词的分界处,通常用来避免意外地匹配到在其他单词内的某个单词,例 \bcat\b 对于 123catabc,123_cat_abc都无法匹配,对于 123 cat abc,123-cat-abc 则可以匹配。即cat前后要用除了[a-zA-Z0-9_]以外的字符分隔开才能匹配 |
| I | 将两个或多个可选项目分隔开来. 如果可选项目中 任何一个 满足条件, 则会形成匹配 |
贪婪:默认情况下 *、?、+ 和 {n,m} 是贪婪的,因为它们消耗到最后一个能满足整个模式的所有字符。要让它们停在 首个 可能的字符, 要在它们后面加上问号。 例如模式 <.+> 表示 "搜索一个 <, 接着一个或多个任意字符, 然后是一个 >",这会匹配整个字符串 "<tag>text</tag>"。在加号后加上问号: <.+?>. 这样会让匹配在第一个 '>' 处停止, 然后再从 '<' 开始匹配,因此只匹配<tag> 和 </tag>
预测和回顾断言: (?=...)、(?!...)、(?<=...) 和 (?<!...) 被称为断言,因为它们要求符合某个条件但不消耗任何字符。例如
abc(?=.\*xyz)中含有预测断言, 它要求在字符串 abc 右边的某个位置存在字符串 xyz (如果不存在, 则匹配失败)。(?=...) 被称为 正预测断言, 因为它要求指定的模式存在. 相反地,(?!...) 是 负预测断言, 因为它要求指定的模式不存在。同样地, (?<=...) 和 (?<!...) 分别是正的和负的 回顾断言, 因为它们检查当前位置的 左边而不是右边。回顾比预测受到更多的限制,因为它们不支持可变大小的限定符, 例如*, ? 和 +。