本项目为开源项目，MIT开源协议。
https://github.com/MountCloud/FireDog

1：请使用gui打开/demo/demo.fdog来参考
！！！修改完规则记得点击 添加或修改。修改完规则库记得点击顶部菜单->操作->保存或者另存为！！！

2：特征讲解
key：代表这个特征的标识。
hex：hex是以二进制形式进行匹配的二进制数据，允许模糊匹配如：0F ?0 A? ??。
text：以文本形式匹配的关键字。

3：规则
$and：[规则数组] 并运算，只有子规则结果全部为true(通过)时，结果为true(通过)，如果有一条子规则结果为false(不通过)，则结果为false(不通过)。
$or：[规则数组] 或运算，有一条子规则结果全部为true(通过)时，结果为true(通过)，如果全部子规则结果为false(不通过)，则结果为false(不通过)。
$not：[规则数组] 非运算，只有子规则结果全部为false(不通过)时，结果为true(通过)，如果有一条子规则结果为true(通过)，则结果为false(不通过)。意思就是如果$not的子规则是$lt($count(key1),$int(5))=$not（key1出现次数小于5）=不能（key1出现的次数小于5）=key1出现的次数需要大于5

$all：[字符串数组] 表示一组key必须至少全部出现1次。$all(key1,key2)表示key1和key2必须至少都出现一次。
$count：*数字规则*[字符串数组] 表示统计key出现的次数。$count(key1,key2)就是统计key1和key2出现的次数。
$int：*数字规则*[数字类型] 表示一个数字。$int(1)代表数字1

$lt：*比较规则*，小于比较，使用两个*数字规则*进行比较，数字规则1 < 数字规则2，则为true（通过）。
$le：*比较规则*，小于等于比较，使用两个*数字规则*进行比较，数字规则1 <= 数字规则2，则为true（通过）。
$gt：*比较规则*，大于比较，使用两个*数字规则*进行比较，数字规则1 > 数字规则2，则为true（通过）。
$ge：*比较规则*，大于等于比较，使用两个*数字规则*进行比较，数字规则1 >= 数字规则2，则为true（通过）。

4：demo中的规则描述（请勿复制描述的规则，因为引擎不识别注释）：
规则库格式是yaml，yaml语法可以自学一下。
规则建议还是别手写，用gui配置减少错误率，而且gui用起来多爽。

特征库讲解：
这个规则结果是：ab至少出现一次，并且c至少出现一次,并且d至少出现一次，并且a至少出现3次（$ge是大于等于），
所以aaabcd能被该规则匹配到：

version: 1.2.1   //当前规则引擎版本号
items:  //规则集合
  - name: test  //单条规则名称
    author: mountcloud //作者
    describe: test new rule engine.  //规则描述
    features:  //特征集合
      - key: key1  //特征的key
        text: a  //text代表文本类型,hex代表二进制类型
      - key: key2
        text: b
      - key: key3
        text: c
      - key: key4
        text: d
      - key: key5
        hex: 0F ?0 A? ?? //二进制类型允许使用模糊匹配
    rules:  //规则
      - $and:  //（规则是第1层）规则是And类型
          - $all: //（$and的子规则）All是以下key至少全部都出现一次
              - key1
              - key2
          - $and:  //（第一层$and的子规则）
              - $all:  //（第二层$and的子规则）
                  - key3
              - $all:
                  - key4
          - $ge: //（第一层$and的子规则）$ge是大于比较，比较第一个规则要大于第二个规则
              - $count: （$ge的子规则）$count是统计key出现的总数
                  - key1
              - $int: 3 （$ge的子规则）$int代表一个固定数字，这里就是 key1出现的次数要大于3
