规则中的匹配运算符主要包含了比较运算符和逻辑运算符两种类型。通过十余种比较运算符、规则间的逻辑运算符,帮助您构建出丰富的规则表达式。
比较运算符
比较运算符用于将请求传入值和表达式中配置的值进行比较。
eq
表示请求传入值与匹配值相等。
-
运算符名称:
等于 -
匹配的值类型:
String -
使用示例:
(http.host eq "www.example.com")
ne
表示请求传入值与匹配值不相等。
-
运算符名称:
不等于 -
匹配的值类型:
String -
使用示例:
(http.host ne "www.example.com")
contains
表示请求传入值中包含特定字符串。
-
运算符名称:
包含 -
匹配的值类型:
String -
使用示例:
(http.host contains "example.com")
not...contains
表示请求传入值中不包含特定字符串。
-
运算符名称:
不包含 -
匹配的值类型:
String -
使用示例:
(not http.host contains "example.com")
matches
表示请求传入值符合特定的正则表达式,兼容 PCRE 正则表达式标准。
仅高级版和企业版套餐支持正则表达式。
-
运算符名称:
与正则表达式匹配 -
匹配的值类型:
String -
使用示例:
(http.host matches "(www|blog)\.example\.com")
not...matches
表示请求传入值不符合特定的正则表达式,兼容 PCRE 正则表达式标准。
仅高级版和企业版套餐支持正则表达式。
-
运算符名称:
与正则表达式不匹配 -
匹配的值类型:
String -
使用示例:
(not http.host matches "(www|blog)\.example\.com")
in
表示请求传入值中有一个或多个设定匹配值。您可以结合使用 $ 实现分组。
-
运算符名称:
等于其中任意一个 -
匹配的值类型:
Array -
使用示例:
(http.host in {"www.example-1.com" "www.example-2.com"})( ip.src in $<LIST_NAME>)
not...in
表示请求传入值中不包含所有的设定匹配值。您可以结合使用 $ 实现分组。
-
运算符名称:
不等于其中任意一个 -
匹配的值类型:
Array -
使用示例:
(not http.host in {"www.example-1.com" "www.example-2.com"})(not ip.src in $<LIST_NAME>)
starts_with
表示请求传入值的开头符合设定的匹配值。
-
运算符名称:
开头为 -
匹配的值类型:
String -
使用示例:
(starts_with(http.host, "blog"))
not starts_with
表示请求传入值的开头不符合设定的匹配值。
-
运算符名称:
开头不为 -
匹配的值类型:
String -
使用示例:
(not starts_with(http.host, "blog"))
ends_with
表示请求传入值的结尾符合设定的匹配值。
-
运算符名称:
结尾为 -
匹配的值类型:
String -
使用示例:
(ends_with(http.host, "cn"))
not ends_with
表示请求传入值的结尾不符合设定的匹配值。
-
运算符名称:
结尾不是 -
匹配的值类型:
String -
使用示例:
(not ends_with(http.host, "cn"))
le
表示请求传入值小于或等于设定的匹配值。
-
运算符名称:
小于或等于 -
匹配的值类型:
int -
使用示例:
(ip.geoip.asnum le 45104)
ge
表示请求传入值大于或等于设定的匹配值。
-
运算符名称:
大于或等于 -
匹配的值类型:
int -
使用示例:
(ip.geoip.asnum ge 45104)
lt
表示请求传入值小于设定的匹配值。
-
运算符名称:
小于 -
匹配的值类型:
int -
使用示例:
(ip.geoip.asnum lt 45104)
gt
表示请求传入值大于设定的匹配值。
-
运算符名称:
大于 -
匹配的值类型:
int -
使用示例:
(ip.geoip.asnum gt 45104)
len eq
表示请求传入值的长度等于设定的匹配值。
-
运算符名称:
长度等于 -
匹配的值类型:
String -
使用示例:
(len(http.request.cookies["session"]) eq 330688)
len gt
表示请求传入值的长度大于设定的匹配值。
-
运算符名称:
长度大于 -
匹配的值类型:
String -
使用示例:
(len(http.request.cookies["session"]) gt 330688)
len lt
表示请求传入值的长度小于设定的匹配值。
-
运算符名称:
长度小于 -
匹配的值类型:
String -
使用示例:
(len(http.request.cookies["session"]) lt 330688)
exists
判断请求是否存在设定值。
-
运算符名称:
存在 -
匹配的值类型:
String -
使用示例:
(exists(http.request.headers["user-agent"]))
not exists
判断请求是否不存在设定值。
-
运算符名称:
不存在 -
匹配的值类型:
String -
使用示例:
(not exists(http.request.headers["user-agent"]))
其他运算符
lower
用于不区分请求值大小写时,将请求传入值统一转换为小写。
-
运算符名称:
不区分大小写 -
匹配的值类型:
String -
使用示例:
(lower(http.request.uri))
逻辑运算符
逻辑运算符用于将多个表达式组合成一个复合表达式。
not
表示对某个表达式的逻辑取反。
-
运算符名称:
逻辑非 -
使用示例:
not (http.host )
and
表示请求需要同时满足两个或多个表达式。
-
运算符名称:
逻辑且 -
使用示例:
(http.host eq "www.example.com" and ip.geoip.country eq "CN")
or
表示请求只需满足多个表达式中的一个即可。
-
运算符名称:
逻辑或 -
使用示例:
(http.host eq "www.example.com") or (ip.geoip.country eq "CN")
分组符号
规则引擎支持使用括号 (、) 作为分组符号。分组符号是表达式的组成部分,支持通过嵌套表达式设置执行优先级。
仅表达式编辑器和 ESA 的 API 支持分组符号,表达式构建器不支持。
分组嵌套表达式配置示例:
(http.host eq "www.example.com" and ((http.referer in {"download.example.com"}) or (http.referer in {"image.example.com"})))