运算符
- 关系运算
名称 |
语法 |
相等 |
a == b |
不等于 |
a!=b |
小于 |
a<b |
小于等于 |
a<=b |
大于 |
a>b |
大于等于 |
a>=b |
- 逻辑运算
名称 |
语法 |
逻辑与 |
a&&b |
逻辑或 |
a||b |
逻辑非 |
!a |
- 算术表达式
名字 |
运算符 |
注释 |
加 |
a+b |
对于字符串代表字符串拼接 |
减 |
a-b |
|
乘 |
a * b |
对于int和count类型小数部分将被舍弃 |
除 |
a/b |
不能用于double |
求余 |
a % b |
不能用于double |
一元加 |
+a |
|
一元减 |
-a |
|
前自增 |
++a |
不能用于double |
前自减 |
--a |
不能用于double |
绝对值 |
| a | |
如果操作类型是string、set、table、or、vector这些类型则计算元素个数 |
- 按位操作
按位操作符处理count类型的操作数或count类型的vector,但按位补操作符只处理count类型的操作数。
名称 |
语法 |
按位与 |
a&b |
按位或 |
a||b |
按位非 |
!a |
按位补足 |
~a |
- 集合操作符
名称 |
语法 |
并集 |
s1 &s2 |
交集 |
s1 | s2 |
补集 |
s1-s2 |
- 赋值运算符
+=运算符还可以用于将元素追加到vector的末尾。例如,v += e等价于v[|v|] = e。
|名称|语法|
|:--:|:--:|
|赋值|a=b|
|加赋值|a+=b|
|减赋值|a-=b|
- 记录字段运算符
记录字段操作符按我的理解就是类似于java对象的属性(看起来应该是这样,待确定)
名字 |
语法 |
注释 |
字段读取 |
a$b |
|
字段值存在检验 |
a?$b |
为bool类型,如果已赋值则为true反之为负 |
- 模式匹配操作符
名字 |
语法 |
注释 |
准确匹配 |
p == s |
计算结果为一个bool值,指明整个字符串与模式是否完全匹配 |
嵌入式匹配 |
p in s |
计算结果为bool值,在字符串内部某地方与模式是否匹配 |
联合匹配 |
p1 & p2 |
计算值为同时匹配p1和p2 |
分别匹配 |
p1 |
p2 |
- 类型转换
as操作符执行类型转换,is操作符检查是否支持类型转换。对于这两个操作符,第一个操作数是一个值,第二个操作数是Zeek脚本类型(内置或用户定义)的名称。
|名字|语法|注释|
|:--:|:--:|:--:|
|类型转换|v as t| 将v的值转换为t ,计算结果为指定类型的值,如果不支持转换的类型就会抛出运行时错误|
补充:目前只支持以下几种类型:
* 代理值 (例如Broker::Data不过这个玩意转换是他自己隐式做的,基本上用不到)可以转换为对应的zeek脚本类型
* 声明类型种的any 可以强制转换为其实际基础类型。
* 他们可以转换为自己声明的类型(一般正常人应该不会用这种操作)
example:
function example(a: any)
{
local s: string;
if ( a is string )
s = (a as string);
}
- 其他操作
名字 |
语法 |
注释 |
隶属 |
a in b |
没看出来和上边那个有啥区别,文档就说是别和for 的那个in弄混了 |
不属于 |
a !in b |
a不属于b |
Table 或者 vector类型读值 |
a[b] |
这个操作符可用于set但是只能用于add和delete语句 |
提取子串 |
a[b:c] |
这个等我看完string进行补充 |
深克隆 |
copy(a) |
和其他语言的引用类型深克隆是一回事 |
模型命名空间读值 |
a::b |
第一个操作数是模块名,第二个操作数是一个标识符,指向从模块导出的全局变量、枚举常量或用户定义类型 |
三目运算符 |
a?b:c |
和其他语言的一样 |