一,?:的功能
()表示捕获分组,()会把每个分组里的匹配的值保存起来,
使用$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'"
标签:表示,字符,常用,匹配,捕获,用法,正则,hi,分组 From: https://www.cnblogs.com/architectforest/p/18502834