Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

WPL 语言参考

本文档提供 WPL 的完整语言元素参考,用于快速查阅类型、语法和结构。


📑 文档导航

章节说明
类型系统所有数据类型速查表
语法元素基本结构、字段定义、格式控制
子字段语法JSON、KV、数组子字段
注解tag、copy_raw 注解
语法速查常用模式快速参考

📋 类型系统

基础类型

#类型标识符样例说明
1预读符号peek_symbol(xxx)peek_symbol(GET)预读但不消费
2忽略__, 2*_, 3*_忽略该字段
3符号symbol(xxx)symbol(HTTP)精确匹配
4布尔booltrue, false布尔值
5字符串chars"hello"任意字符串
6整数digit123, 8080整数
7浮点float3.14, 0.01浮点数
8序列号snABC123XYZ自动生成序列号

时间类型

#类型标识符样例说明
9通用时间time2023-05-15 07:09:12自动识别多种格式
10ISO 8601time_iso2023-05-15T07:09:12ZISO 8601 标准
11RFC 3339time_33392022-03-21T12:34:56+00:00RFC3339 标准
12RFC 2822time_2822Mon, 07 Jul 2025 09:20:32 +0000邮件时间格式
13CLF 时间time/clf06/Aug/2019:12:12:19 +0800Apache/Nginx 日志
14Unix时间戳time_timestamp1647849600Unix 秒级时间戳

网络类型

#类型标识符样例说明
15IP地址ip192.168.1.100, ::1IPv4/IPv6 地址
16IP网段ip_net192.168.0.0/24CIDR 网段
17域名domainexample.com域名
18邮箱emailuser@example.com邮箱地址
19端口port8080, 443端口号
20URLurlhttp://example.com/path完整 URL

编码类型

#类型标识符样例说明
21十六进制hex48656c6c6f十六进制数据
22Base64base64aGVsbG8=Base64 编码

结构化类型

#类型标识符样例说明
23键值对kvarrkey=valueKV 格式
24JSONjson{"k":"v"}JSON 对象
25严格JSONexact_json{"k":"v"}严格验证 JSON
26对象obj嵌套对象通用对象
27数组array[1,2,3]数组
28数字数组array/digit[1,2,3]数字数组
29字符串数组array/chars["a","b"]字符串数组

协议类型

#类型标识符样例说明
30HTTP请求http/requestGET /path HTTP/1.1HTTP 请求行
31HTTP状态http/status200, 404HTTP 状态码
32User-Agenthttp/agentMozilla/5.0...浏览器 UA
33HTTP方法http/methodGET, POSTHTTP 方法

特殊类型

#类型标识符样例说明
34身份证id_card11010119900101123418 位身份证
35手机号mobile_phone1380013800011 位手机号
36协议文本proto_text协议格式协议文本解析
37自动识别auto自动推断自动类型推断

🔧 语法元素

基本结构

package 包名 {
  rule 规则名 {
    |预处理管道|
    (字段列表)
  }
}

字段定义完整语法

[N*] DataType [ (symbol) ] [ (subfields) ] [:name] [ [len] ] [ format ] [ sep ] { | pipe }
部分说明示例
[N*]重复计数kvarr, 3*ip
DataType数据类型digit, ip, json
(symbol)符号内容symbol(GET)
(subfields)子字段列表json(chars@name)
:name字段命名:status, :client_ip
[len]长度限制[100]
format格式控制<[,]>, ", ^10
sep分隔符\,, \;, \0
| pipe管道函数|f_has(name)|

格式控制

格式语法示例说明
范围定界<beg,end><[,]>, <{,}>起止符号
引号"chars"引号包裹
字符计数N*10*chars, 5*_按字符数

分组元信息

元信息说明示例匹配行为
seq顺序匹配(默认)seq(ip, digit, time)按顺序依次匹配
alt择一匹配alt(ip, digit)匹配其中一个
opt可选匹配opt(chars)失败不报错
some_of尽可能多some_of(ip, digit)循环匹配

分隔符优先级

字段级(3) > 组级(2) > 上游(1)
分隔符写法说明优先级
逗号\,逗号分隔字段级 (3)
分号\;分号分隔字段级 (3)
冒号\:冒号分隔字段级 (3)
空格\s空格分隔字段级 (3)
行尾\0读到行尾字段级 (3)
组分隔(...)\sep组级分隔组级 (2)
默认继承上游上游 (1)

🎯 子字段语法

JSON 子字段

json(type@key, type@key, ...)

示例:

# 基本提取
json(chars@name, digit@age)

# 嵌套路径
json(chars@user/name, digit@user/age)

# 可选字段
json(chars@name, opt(chars)@email)

KV 子字段

kvarr(type@key, type@key, ...)

示例:

kvarr(chars@hostname, digit@port, opt(chars)@user)

数组

array[/subtype]

示例:

array/digit:nums          # [1,2,3]
array/chars:items         # ["a","b"]
array/array/digit         # 嵌套数组

📝 注解

tag 注解

#[tag(key1:"value1", key2:"value2")]
package demo {
  rule x { (digit, time) }
}

copy_raw 注解

#[copy_raw(name:"raw_log")]
rule nginx_log {
  (ip, time, chars)
}

原始字符串(避免转义)

#[tag(path:r#"C:\Program Files\App"#)]
package demo {
  rule x { (digit) }
}

💡 语法速查

常用模式

# 字段命名
type:name              # digit:status

# 忽略字段
_                      # 忽略 1 个
N*_                    # 忽略 N 个

# 重复模式
kvarr                  # 自动解析KV
N*ip                   # 固定 N 次

# 可选字段
opt(chars)             # 单个可选
opt(kvarr)             # 可选 KV

# 格式控制
<[,]>                  # 方括号包裹
"                      # 引号包裹
^10                    # 固定 10 字符

# 分隔符
\,                     # 逗号
\;                     # 分号
\0                     # 行尾

# 子字段
json(chars@key)        # JSON 字段
kvarr(digit@port)      # KV 字段
@path/to/field         # 嵌套路径

相关文档