字符 | 含义 |
---|---|
\n | 换行符 |
\r | 回车 |
\s | 匹配任何空白字符,包括空格、制表符、换页符等等 |
\S | 匹配任何非空白字符 |
$ | 匹配输入字符串的结尾位置,比如 abc$ 可以匹配到 123abc
|
^ | 匹配输入字符串的开始位置,但在方括号中使用,表示除去表达式中的字符。例 ^abc 可以匹配 abc 123,[^abc] 可以匹配 bcdef
|
. | 匹配任何 单个字符 (除新行符 (\r\n) 外) |
* | 匹配 零个或多个 前面的字符。.* 是匹配范围最广的模式之一, 因为它可以匹配零个或多个任意字符 |
+ | 匹配 一个或多个 前面的字符 |
? | 匹配 零个或一个 前面的字符,可以理解为前面的字符是可选的。例 a(bc)? 可以匹配 a xxxx 或者 abc xxxxx |
{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 (如果不存在, 则匹配失败)。(?=...) 被称为 正预测断言, 因为它要求指定的模式存在. 相反地,(?!...) 是 负预测断言, 因为它要求指定的模式不存在。同样地, (?<=...) 和 (?<!...) 分别是正的和负的 回顾断言, 因为它们检查当前位置的 左边而不是右边。回顾比预测受到更多的限制,因为它们不支持可变大小的限定符, 例如*, ? 和 +。
网友评论