正则:一些常用的用法

一,?:的功能

()表示捕获分组,()会把每个分组里的匹配的值保存起来,
使用$n
(n是一个数字,表示第n个捕获组的内容)
(?:)表示非捕获分组,和捕获分组唯一的区别在于,非捕获分组匹配的值不会保存起来

例子:
#该规则表示,如果请求方式是PUT、CONNECT、TRACE、DELETE的任意一种方式,则拦截此次访问

SecRule REQUEST_METHOD "^(?:PUT|CONNECT|TRACE|DELETE)$" "phase:1,id:49,log,block,t:none"

 

二,方括号:

1,

[] :在正则表达式中,[]表示满足括号中任一字符。
     比如“[hi]”,它就不是匹配“hi”了,而是匹配“h”或者“i”。
     如果把正则表达式改为“[Hh]i”,就可以既匹配“Hi”,又匹配“hi”了。

2,

表示数字:   [0-9] 或 \d

3,重复:

*:它表示前面的字符可以重复0次或多次
+:它表示前面的字符可以重复1次或多次

4,

^匹配开始位置
$匹配结束位置

例子:

#该规则表示,如果请求头中的HOST字段的内容为IP地址的话,
则使用deny动作拒绝此次访问,同时向客户端返回400错误

SecRule REQUEST_HEADERS:Host "^[\d\.]+$" "phase:1,deny,id:47,log,status:400,msg:'Host header is a numeric IP address'"

 

posted @ 2024-10-25 16:34  刘宏缔的架构森林  阅读(14)  评论(0编辑  收藏  举报