正则表达式语法
- 本文的正则表达式语法适用于
Nginx
服务器的配置。
特殊字符 | 说明 |
---|---|
* | 0次或多次匹配前面的字符或子表达式。等效于{0,} zo* 与 z 和zoo 匹配。 |
+ | 1次或多次匹配前面的字符或子表达式。等效于{1,} zo+ 与 zo 和 zoo 匹配,与z 不匹配。 |
? | 0次或1次匹配前面的字符串或子表达式。等效于{0,1} 该字符串紧随任何其他限定符 (*、+、?、{n})、{n,}、{n,m}) 之后时,匹配模式是非贪婪的。非贪婪模式匹配搜索到的、尽可能少的字符串,而默认的贪婪模式匹配搜索到的、尽可能多的字符串。zo? 与z 和 zo 匹配,但与 zoo 不匹配;o+? 只与oooo 中的单个o 匹配,而o+ 与所有o 匹配。do(es)? 与 do 或 does 中的 do 匹配 |
^ | 匹配搜索字符串开始的位置。如果标志中包括m (多行搜索)字符,还将匹配\n 或\r 后面的位置。如果将 ^ 用作括号表达式中的第一个字符,则会对字符集求反。^\d{3} 与搜素字符串开始处的3个数字匹配。[^abc] 与除a 、 b 、 c 以外的任何字符匹配。 |
$ | 匹配搜索字符串结尾的位置。如果标志中包含m (多行搜索)字符,还将匹配\n 或\r 前面的位置。\d{3}$ 与搜索字符串结尾处的3个数字匹配。 |
. | 匹配除换行符\n 之外的任何单个字符。若要匹配包括\n 在内的任意字符,请使用诸如[\s\S] 之类的模式。 |
[] | 标记括号表达式的开始和结尾。[1-4] 与1、2、3、4匹配。[^aAeEiIoOuU] 与任何非云隐字符匹配。 |
{} | 标记限定符表达式的开始和结尾。a{2,3} 与aa 和aaa 匹配。 |
() | 标记子表达式的开始和结尾。Nginx 服务器使用该元字符保存子表达式以备将来之用。A(\d) 与A0 至A9 匹配。保存该数字以备将来之用。 |
| | 指示在两个或多个项之间进行选择。 `z |
/ | 表示JScript 中的文本正则表达式模式的开始或结尾。在第二个/ 后添加单字符标志可以指定搜索行为。/abc/gi 是与abc 匹配的JScript 文本正则表达式。g (全局)标志指定查找模式的所有匹配项,还可以使用i ,表示忽略大小写,使搜索不区分大小写。 |
\b | 与一个字边界匹配;即字与空格间的位置。er\b 与 nerver 中的er 匹配。但与 verb 中的 er 不匹配。 |
\B | 非边界字匹配。er\B 与 verb 中的 er 匹配。但与 nerver 中的 er 不匹配。 |
\d | 数字字符匹配。等效于[0-9] 在搜索字符串 12345 中,\d{2} 与12 和34 匹配。\d 与1 、2 、 3 、 4 、5 匹配。 |
\D | 非数字字符匹配。等效于[^0-9]。\D+ 与abc123 def 中的abc 和 def 匹配。 |
\w | 与以下任意字符匹配: A-Z 、a-z 、0-9 和下划线。等效于[A-Za-z0-9_] 。在字符串 The quick brown fox... 中,\w+ 与The 、 quick 、 brown 、fox 匹配。 |
\W | 与除A-Z 、a-z 、0-9 和下划线以外的任意字符匹配。等效于[^A-Za-z0-9_] 。在字符串 The quick brown fox... 中,\W+ 与... 和所有空格匹配。 |
[xyz] | 字符集。与任何一个指定字符匹配。[abc] , 与 plain 中的a 匹配。 |
[^xyz] | 反向字符集。与未指定的任何字符匹配。[^abc] , 与 plain 中的p 、l 、 i 、 n 匹配。 |
[a-z] | 字符范围。匹配指定范围内的任何字符。[a-j] ,与a 到 j 范围内的任何小写字母符匹配。[E-Q] , 与E 到Q 范围内的任何大写字母符匹配。 |
[^a-z] | 反向字符范围。与不在指定范围内的任何字符匹配。[^a-j] ,与不在范围a 到 j 内的任何字符匹配。[^E-Q] ,与不在E 到Q 范围内的任何大写字母符匹配。 |
{n} | 正好匹配n 次。n 是非负整数。o{2} 与Bob 中的 o 不匹配,但与 food 中的2个 0 匹配。 |
{n,} | 至少匹配n 次。n 是非负整数。* 与{0,} 相等; + 与 {1,} 相等。 |
{n,m} | 匹配至少n 次,至多m 次。m 和n 是非负整数,其中n<=m 。逗号和数字之间不能有空格。? 与 {0,1} 相等。在搜索字符串1234567 中,\d{1,3} 与123 、 456 、 7 匹配。 |
(pattern) | 与pattern 匹配并保存匹配项。在Nginx 服务器的配置文件中,可以通过该方法从匹配的字符串中返回检索的匹配项,以数组元素形式保存。若要匹配括号字符() ,请使用转义字符\( 或者 \) `(Chapter |
(?:pattern) | 与pattern 匹配,但不保存匹配项;即不会存储匹配项以备将来之用。这对于用or 字符` |
(?=pattern) | 积极的预测先行。找到一个匹配项后,将在匹配文本之前开始搜索下一个匹配项。不会保存匹配项以备将来之用。^(?=.*\d).{4,8}$ ,匹配长度介于4到8个字符之间,并且必须至少包含一个数字的字符串。在该模式中,.*\d 查找后跟有数字的任意多个字符。对于搜索字符串abc3qr ,这与abc3 匹配。从该匹配项之前 (而不是之后) 开始;{4,8} 与包含4-8个字符的字符串匹配。这与abc3qr 匹配。这个正则表达式可以用于判定密码的复杂度。 |
(?!pattern) | 消极的预测先行。匹配与pattern 不匹配的搜索字符串。找到一个匹配项后,将在匹配文本之前开始搜索下一个匹配项。不会保存匹配项以备将来之用。\b(?!th)\w+\b 与不与 th 开头的单词匹配。该模式中,\b 与一个字边界匹配。对于搜索字符串quick ,这与第一个空格匹配。(?!th)与非th 字符串匹配。这与qu 匹配。从该匹配项开始,\w+ 与一个字匹配。这与quick 匹配。 |
^和$ | 指定搜索字符串的开始和结束位置。这将在搜索字符串包含匹配字符之外的任何字符是阻止匹配。 |
\cx | 匹配x 指示的控制字符。x 的值必须在A-Z 或a-z 范围内。如果不是这样,则假定c 就是文本c 字符本身。 |
\cM | 与Ctrl+M 或一个回车符匹配。 |
\xn | 匹配n ,此处的n 是一个16进制转义码。16进制转义码必须正好是两位数长。允许在正则表达式中使用ASCII 代码。\x41 与 A 匹配。 \x041 等效于后跟有 1 的 \x04 (因为n 必须正好是两位数)。 |
\nm | 匹配num ,此处的num 是一个正整数。这是对已保存的匹配项的引用。(.)\1 与2个连续的相同字符匹配。 |
\n | 标识一个8进制转义码或反向引用。如果\n 前面至少有n 个捕获子表达式,则 n 是反向引用。否则,如果 n 是8进制数 (0-7) ,那么 n 是8进制转义码。(\d)\1 与两个连续的相同数字匹配。 |
\nm | 标识一个8进制转义码或反向引用。 如果 \nm 前面至少有 nm 个捕获子表达式,那么 nm 是反向引用。 如果\nm 前面至少有 n 个捕获子表达式,则 n 是反向引用,后面跟有文本 m 。如果上述情况都不存在,当 n 和 m 是8进制数字 (0-7) 时, \nm 匹配8进制转义码 nm 。\nml 当 n 是8进制数字 (0-3) , m 和 l 是8进制数字 (0-7) 时,匹配8进制转义码 nml 。 |
\011 | 与制表符匹配。 |
\un | 匹配n ,其中 n 是以4位16进制数表示的 Unicode 字符。\u00A9 与版权符号(©) 匹配。 |
\f | 换页符。等效于\x0c 和 \cL |
\n | 换行符。等效于\x0a 和 \cJ |
\r | 回车符。等效于\x0d 和 \cM |
\t | Tab 制表符。等效于\x09 和 \cI |
\s | 任何空白字符,包括空格、制表符和换页符。等效于[\f\n\r\t\v] |
\S | 等效于任何非空白字符。等效于[^\f\n\r\t\v] |
\v | 垂直制表符。等效于\x0b 和 \cK |