Skip to content

运算符

  1. 关系运算
名称 语法
相等 a == b
不等于 a!=b
小于 a<b
小于等于 a<=b
大于 a>b
大于等于 a>=b
  1. 逻辑运算
名称 语法
逻辑与 a&&b
逻辑或 a||b
逻辑非 !a
  1. 算术表达式
名字 运算符 注释
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这些类型则计算元素个数
  1. 按位操作 按位操作符处理count类型的操作数或count类型的vector,但按位补操作符只处理count类型的操作数。
名称 语法
按位与 a&b
按位或 a||b
按位非 !a
按位补足 ~a
  1. 集合操作符
名称 语法
并集 s1 &s2
交集 s1 | s2
补集 s1-s2
  1. 赋值运算符

+=运算符还可以用于将元素追加到vector的末尾。例如,v += e等价于v[|v|] = e。 |名称|语法| |:--:|:--:| |赋值|a=b| |加赋值|a+=b| |减赋值|a-=b|

  1. 记录字段运算符

记录字段操作符按我的理解就是类似于java对象的属性(看起来应该是这样,待确定)

名字 语法 注释
字段读取 a$b
字段值存在检验 a?$b 为bool类型,如果已赋值则为true反之为负
  1. 模式匹配操作符
名字 语法 注释
准确匹配 p == s 计算结果为一个bool值,指明整个字符串与模式是否完全匹配
嵌入式匹配 p in s 计算结果为bool值,在字符串内部某地方与模式是否匹配
联合匹配 p1 & p2 计算值为同时匹配p1和p2
分别匹配 p1 p2
  1. 类型转换

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);
    }

  1. 其他操作
名字 语法 注释
隶属 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 和其他语言的一样

Comments