元字符:具有固定含义的特殊符号
符号
符号 | 描述 | 使用 |
---|---|---|
\ | 将下一个字符标记为一个特殊字符 或者将特殊字符标记为原义字符(即仅表示字符本身,无特殊含义) | \ +字符 \\ 表示匹配字符\,\( 匹配字符( |
^ | 设置匹配字符串位置为开始位置 | ^示例 |
$ | 匹配输入字符串的结束位置 | 注意,与^不同的是,匹配的字符串放在 $ 前,即匹配结尾为a的字符串应该是a$ |
* | 匹配前面的子表达式零次或多次 | *示例 |
+ | 匹配前面的子表达式一次或多次 | |
{n} | n 为非负整数,匹配确定的n次 | |
{n,} | n 为非负整数,至少匹配n次 | {0,}等效于*,{1,}等效于+ |
{n,m} | m 和 n 均为非负整数,其中n <= m,最少匹配 n 次且最多匹配 m 次 | |
? | 匹配前面的子表达式零次或一次 在限制符 (*, +, ?, {n,}, {n,m}) 后面时匹配模式为非贪婪模式 | 非贪婪模式:在满足表达式的情况下尽可能的匹配短字符串 (即如果是 *? 则只匹配零次表达式,+? 只匹配一次表达式,{2,4}? 只匹配重复出现2次的表达式)非贪婪模式示例 |
. | 匹配除回车换行符(\n、\r)之外的任何单个字符 | |
(string) | 匹配括号内的字符串(即与括号内的字符串完全一致) 括号内的字符串匹配后会创建捕获分组(测试看不出来,但实际应用时会使用到) 在string前可加入?、?=等进行其它匹配: str1(?=str2) 查找后面是str2的str1(?<=str2)str1 查找前面是str2的str1str1(?!str2) 查找后面不是str2的str1(?<!str2)str1 查找前面不是str2的str1str1(?:str2) 效果和不加?:极其类似,但不会在匹配后创建捕获分组 | 注意:如果需匹配(),则在(和)前加上\将其标记为原义字符 |
[string] | 字符集合,匹配所包含的任意一个字符 可以通过-匹配连续字符 可以在字符串前加^进行反向匹配 | 注意其与()的区别,[]匹配其中的任意一个字符,()匹配完全一致的字符串 []与()区别以及-和^的使用 |
x|y | 匹配 x 或 y | z|food 可匹配字符z或字符串food(z|f)ood 则匹配字符串zood或food |
优先级(从高到低)
运算符 | 描述 |
---|---|
\ | 转义符 |
(), (?: ), (?=), [ ] | 圆括号和方括号 |
*, +, ?, {n}, {n,}, {n,m} | 限定符 |
^, $, \ | 任何元字符、任何字符 定位点和序列(即:位置和顺序) |
| | "或"操作(即任意字符优先级高于或操作,包括用于匹配的普通字符) |
\ +字符
符号 | 描述 | 使用 |
---|---|---|
\b | 匹配一个单词边界,也就是指单词和非单词间的位置 | |
\B | 匹配非单词边界,即匹配的字符串被字母包围 | \b和\B示例 |
\cx | 匹配由 x 指明的控制字符。 x必须在[a-zA-Z]中,否则将 c 视为一个原义的 ‘c’ 字符 | 控制字符:参考百度百科中的US-ASCII控制字符 x非字母示例 |
\d | 匹配一个数字字符。等价于 [0-9] | |
\D | 匹配一个非数字字符。等价于 [^0-9] | \d和\D示例 |
\f | 匹配一个换页符。等价于 \x0c 和 \cL | |
\n | 匹配一个换行符。等价于 \x0a 和 \cJ | |
\r | 匹配一个回车符。等价于 \x0d 和 \cM | |
\s | 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v] | |
\S | 匹配任何非空白字符。等价于 [^ \f\n\r\t\v] | |
\t | 匹配一个制表符。等价于 \x09 和 \cI | |
\v | 匹配一个垂直制表符。等价于 \x0b 和 \cK | |
\w | 匹配字母、数字、下划线。等价于[A-Za-z0-9_] 注意:在有些地方使用时还会匹配汉字 | |
\W | 匹配非字母、数字、下划线。等价于 [^A-Za-z0-9_] | |
\xn | n为两位十六进制数,匹配以n为ASCII值的字符 | \xn示例 |
\num | \前有字符串:对第 num个表达式的引用 \前无字符串:num在范围内(小于八进制数400Q)则匹配以num为八进制值对应的ASCII值的字符 | (.)\1 匹配两个连续的相同字符A\1 等效于匹配AA abc\1 等效于匹配abca abc\2\3 等效于匹配abcbc ———————————— \141 等效于匹配a |
\un | n为四位十六进制数,匹配以n对应的Unicode 字符 | Unicode编码表 |
示例
^示例
看似有第二行,但实际上一二行间由换行符连接,因此只有一处匹配
*示例
zo*
用于匹配字符串z与0个或任意个o
非贪婪模式示例
[]与()区别示例
(2612):匹配字符串2612
[2612]:匹配字符2、6、1
通过-匹配连续字符以及通过^进行反向匹配:
[1-3]即匹配字符1、2、3,[^1-3]即匹配除1、2、3之外的所有字符
\b和\B示例
此时,如果在never后加入其它字符,通过\b查找,同样可匹配一处
x非字母示例
如左图所示,当成普通的\c字符串进行匹配(右图为正常匹配控制字符,作为对比)
\d和\D示例
数字和非数字的匹配,注意,右图匹配非数字包括换行符,因此是4处匹配(特意把光标移到下一行方便查看)