正则表达式语法
- 本文的正则表达式语法适用于
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 |
