Regex
GROK
Group
(ABC)
匹配 ABC 且存为分组,分组从 1 开始,通过 \n
引用。
(?:ABC)
匹配 ABC 但不存为分组。
指定分组名称: (?<name>) or (?'name')
,通过 \k<name>
引用。
注释: (?#comment)
Zero-width Assertions
Positive lookahead 肯定性正向预查: ABC(?=exp)
ABC 断言自身出现的位置的 后面 能匹配表达式 exp
Negative lookahead 否定性正向预查: ABC(?!exp)
ABC 断言自身出现的位置的 后面 不 能匹配表达式 exp
Positive lookbehind 肯定性反向预查: (?<=exp)ABC
ABC 断言自身出现的位置的 前面 能匹配表达式 exp
Negative lookbehind 否定性反向预查: (?<!exp)ABC
ABC 断言自身出现的位置的 前面 不 能匹配表达式 exp
断言表达式 exp 不会计入匹配,但可以用括号扩起来计入分组。
符号 | 名字 | 意思 |
---|---|---|
reg(?=exp) | 零宽度正先行断言 | reg 匹配的内容后面内容满足 exp 规则 |
reg(?!exp) | 零宽度负先行断言 | reg 匹配的内容后面内容不满足 exp 规则 |
(?<=exp)reg | 零宽度正后发断言 | reg 匹配的内容前面内容满足 exp 规则 |
(?<!exp)reg | 零宽度负后发断言 | reg 匹配的内容前面内容不满足 exp 规则 |
Useful Regexp
Regexp | Caption |
---|---|
^(1\d{2}\vert2[0-4]\d\vert25[0-5]\vert[1-9]\d\vert\d)(\.(1\d{2}\vert2[0-4]\d\vert25[0-5]\vert[1-9]\d\vert\d)){3}$ |
IP address |
Shell
字符类 | 意义 |
---|---|
[:alnum:] | 匹配任意一个字母或数字 |
[:alpha:] | 匹配任意一个字母,ASCII等价于:[A-Za-z] |
[:digit:] | 匹配任意一个数字 |
[:lower:] | 匹配任意一个小写字母 |
[:upper] | 匹配任意一个大写字母 |
[:word:] | 与 [:alnum:] 相同, 但增加了下划线字符。 |
[:blank:] | 包含空格和tab字符 |
[:cntrl:] | ASCII控制字符0到31和127 |
[:graph:] | ASCII可视字符33到126 |
[:punct:] | 标点符号字符 |
[:print:] | 可打印的字符。在[:graph:]中的所有字符,再加上空格字符 |
[:space:] | 空白字符,包括空格,tab,回车,换行,vertical tab, 和 form feed。ASCII等价于:[\t\v\f] |
[:xdigit:] | 用来表示十六进制数字的字符。ASCII等价于:[0-9A-Fa-f] |
字符 | 意义 |
---|---|
\cx | 匹配由x指明的控制字符,x∈[a-zA-Z] |
\f | 匹配一个换页符。等价于 \x0c 和 \cL |
\d | 匹配一个数字 |
\D | 匹配一个非数字 |
\s | 匹配一个任意空白字符,如空格、制表符、换页符 |
§ | 匹配任何非空白字符,[^\f\t\v] |
\w | 字母数字以及下划线,[a-zA-Z0-9\_] |
\W | [a-zA-Z0-9\_] |
operation
限定符 | 意义 |
---|---|
. |
任何单个字符 |
* |
匹配任意多个字符(包括零个或一个) |
? |
匹配任意一个字符(不包括零个) |
+ |
匹配一个或零个字符 |
[] |
匹配中括号内的字符集合 |
[^] |
匹配非中括号内的字符集合 |
\vert |
左右表达式任意一个 |
{n} |
匹配n次 |
{n,m} |
匹配(n,m)次 |
{n,} |
匹配n+次 |
{,m} |
匹配m-次 |
[characters] |
匹配任意一个属于字符集中的字符 |
[!characters] |
匹配任意一个不是字符集中的字符 |
[[:class:]] |
匹配任意一个属于指定字符类中的字符 |
bash 中 [] 只能用于匹配文件名,{} 可用于任意场景,前提是这两种通配符能够被解析,若不能则当作普通字符。
扩展的正则表达式,元字符:
元字符 | 描述 | |
---|---|---|
$ |
匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 \ 。要匹配 $ 字符本身,请使用 \$ | |
( ) | 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \) | |
* | 匹配前面的子表达式零次或多次 | |
+ | 匹配前面的子表达式一次或多次 | |
. | 匹配除换行符 \n 之外的任何单字符 | |
[ | 标记一个中括号表达式的开始 | |
? | 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \? | |
\ | 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, n 匹配字符 n。\n 匹配换行符。\\ 匹配 \\,而 \( 则匹配 ( | |
^ |
匹配输入字符串的开始位置,除非在方括号表达式中使用,当该符号在方括号表达式中使用时,表示不接受该方括号表达式中的字符集合 | |
{ | 标记限定符表达式的开始 | |
| | 指明两项之间的一个选择 |
^ $ . [ ] { } - ? * + ( ) | \
然后其它所有字符都被认为是原义字符,虽然在个别情况下,反斜杠会被用来创建元序列, 也允许元字符被转义为原义字符,而不是被解释为元字符。
BRE
^ $ . [ ] *
( ) { } 用反斜杠 \ 转义后,被看作是元字符
PRE
( ) { } ? + |
Nginx
- = 精确匹配路径,用于不含正则表达式的 uri 前,如果匹配成功,不再进行后续的查找;
- ^~ 用于不含正则表达式的 uri 前,表示如果该符号后面的字符是最佳匹配,采用该规则,不再进行后续的查找;
- ~ 表示用该符号后面的正则去匹配路径,区分大小写;
- ~* 表示用该符号后面的正则去匹配路径,不区分大小写。跟 ~ 优先级都比较低,如有多个 location 的正则能匹配的话,则使用正则表达式最长的那个;