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 的正则能匹配的话,则使用正则表达式最长的那个;
湘ICP备19014083号-1