WPL 完整类型系统示例
一个示例展示 WPL 支持的所有主要数据类型
本文档提供一个完整的、可运行的 WPL 规则示例,展示 23 种主要数据类型的使用方法。这是学习 WPL 类型系统的最佳参考。
📑 文档导航
📋 类型覆盖清单
本示例包含以下类型:
| 类别 | 包含类型 | 数量 |
|---|---|---|
| 基础类型 | peek_symbol、symbol、bool、chars、digit、float、_ | 7 |
| 时间类型 | time_3339、time_2822、time/clf、time_timestamp | 4 |
| 网络类型 | ip、ip_net、port | 3 |
| 结构化类型 | kvarr、json | 2 |
| 协议类型 | http/request、http/status、http/agent、http/method | 4 |
| 编码类型 | hex、base64 | 2 |
| 特殊类型 | sn | 1 |
| 总计 | 23 种类型 |
🚀 完整示例
输入数据
peek_symbol symbol true "hello world" 123 3.14 2026-01-19T12:34:56Z 2022-03-21T12:34:56+00:00 Mon, 07 Jul 2025 09:20:32 +0000 [06/Aug/2019:12:12:19 +0800] 1647849600 192.168.1.100 192.168.0.0/24 name=test {"strict":true} "GET /api/users HTTP/1.1" 200 "Mozilla/5.0" "POST" 8080 ABC123XYZ 0x1A2B YmFzZTY0ZGF0YQ==
WPL 规则
package wpl_example {
rule full_types {
(
// 1. peek_symbol - 预读符号(不消费)
peek_symbol(peek_symbol):peek_sym,
// 2. symbol - 精确匹配符号
symbol(symbol):sym,
// 3. bool - 布尔值
bool:bool_val,
// 4. chars - 字符串(带引号)
chars":quoted_str,
// 5. digit - 整数
digit:integer,
// 6. float - 浮点数
float:float_val,
// 7. time_3339 - ISO 8601 / RFC3339
time_3339:time_iso,
// 8. time_3339 - RFC3339(带时区)
time_3339:time_rfc3339,
// 9. time_2822 - RFC2822(邮件时间格式)
time_2822:time_rfc2822,
// 10. time/clf - Common Log Format(Apache/Nginx)
time/clf<[,]>:time_clf,
// 11. time_timestamp - Unix 时间戳
time_timestamp:timestamp,
// 12. ip - IP 地址
ip:ip_addr,
// 13. ip_net - IP 网段(CIDR)
ip_net:ip_network,
// 14. kvarr - 键值对
kvarr(chars@name):kv_data,
// 15. json - JSON 对象
json(bool@strict):json_data,
// 16. http/request - HTTP 请求行
http/request":http_req,
// 17. http/status - HTTP 状态码
http/status:http_status,
// 18. http/agent - User-Agent
http/agent":user_agent,
// 19. http/method - HTTP 方法
http/method":http_method,
// 20. port - 端口号
port:port_num,
// 21. sn - 序列号
sn:serial,
// 22. hex - 十六进制
hex:hex_data,
// 23. base64 - Base64 编码
base64:base64_data
)
}
}
输出结果
{
"peek_sym": "peek_symbol",
"sym": "symbol",
"bool_val": true,
"quoted_str": "hello world",
"integer": 123,
"float_val": 3.14,
"time_iso": "2026-01-19 12:34:56",
"time_rfc3339": "2022-03-21 12:34:56",
"time_rfc2822": "2025-07-07 09:20:32",
"time_clf": "2019-08-06 12:12:19",
"timestamp": 1647849600,
"ip_addr": "192.168.1.100",
"ip_network": "192.168.0.0/24",
"kv_data": {"name": "test"},
"json_data": {"strict": true},
"http_req": "GET /api/users HTTP/1.1",
"http_status": 200,
"user_agent": "Mozilla/5.0",
"http_method": "POST",
"port_num": 8080,
"serial": "ABC123XYZ",
"hex_data": "0x1A2B",
"base64_data": "YmFzZTY0ZGF0YQ=="
}
📖 类型详解
基础类型
1. peek_symbol - 预读符号
peek_symbol(peek_symbol):peek_sym
- 作用:预读匹配但不消费输入
- 用途:用于向前查看而不影响后续解析
2. symbol - 精确匹配符号
symbol(symbol):sym
- 作用:精确匹配指定字符串
- 用途:匹配固定关键字、分隔符等
3. bool - 布尔值
bool:bool_val
- 匹配:
true或false - 输出:布尔类型
4. chars - 字符串
chars":quoted_str
- 格式:支持引号包裹
"hello"或裸字符串hello - 用途:提取任意字符串
5. digit - 整数
digit:integer
- 匹配:整数,如
123、-456 - 输出:整数类型
6. float - 浮点数
float:float_val
- 匹配:浮点数,如
3.14、-0.5 - 输出:浮点数类型
时间类型
7-8. time_3339 - RFC3339/ISO 8601
time_3339:time_iso // 2026-01-19T12:34:56Z
time_3339:time_rfc3339 // 2022-03-21T12:34:56+00:00
- 格式:ISO 8601 / RFC3339 标准
- 支持:带时区或不带时区
9. time_2822 - RFC2822(邮件时间)
time_2822:time_rfc2822
- 格式:
Mon, 07 Jul 2025 09:20:32 +0000 - 用途:邮件头、RSS 等
10. time/clf - Common Log Format
time/clf<[,]>:time_clf
- 格式:
[06/Aug/2019:12:12:19 +0800] - 用途:Apache/Nginx 日志
11. time_timestamp - Unix 时间戳
time_timestamp:timestamp
- 格式:秒级时间戳,如
1647849600 - 输出:时间类型
网络类型
12. ip - IP 地址
ip:ip_addr
- 支持:IPv4(
192.168.1.100)和 IPv6(::1)
13. ip_net - IP 网段
ip_net:ip_network
- 格式:CIDR 表示法,如
192.168.0.0/24
14. port - 端口号
port:port_num
- 范围:1-65535
结构化类型
15. kvarr - 键值对
kvarr(chars@name):kv_data
- 格式:
key=value - 支持:自动解析或指定键提取
- 示例:
name=test→{name: "test"}
16. json - JSON 对象
json(bool@strict):json_data
- 支持:完整 JSON 解析
- 子字段:可提取嵌套字段
- 示例:
{"strict":true}→{strict: true}
协议类型
17. http/request - HTTP 请求行
http/request":http_req
- 格式:
"GET /api/users HTTP/1.1" - 提取:方法 + 路径 + 协议版本
18. http/status - HTTP 状态码
http/status:http_status
- 格式:
200、404、500等
19. http/agent - User-Agent
http/agent":user_agent
- 格式:
"Mozilla/5.0..." - 用途:浏览器标识
20. http/method - HTTP 方法
http/method":http_method
- 支持:
GET、POST、PUT、DELETE等
编码类型
21. hex - 十六进制
hex:hex_data
- 格式:
0x1A2B或1A2B - 输出:十六进制字符串
22. base64 - Base64 编码
base64:base64_data
- 格式:
YmFzZTY0ZGF0YQ== - 输出:Base64 编码字符串
特殊类型
23. sn - 序列号
sn:serial
- 格式:字母数字组合,如
ABC123XYZ - 用途:设备序列号、订单号等
💡 使用建议
学习路径
- 第一步:先理解基础类型(
digit、chars、ip) - 第二步:掌握时间类型(根据日志格式选择)
- 第三步:学习结构化类型(
json、kvarr) - 第四步:了解协议类型(
http/*)
实战建议
- 快速查阅:遇到不认识的数据格式,先在本页面搜索
- 复制即用:直接复制对应类型的语法到你的规则中
- 类型组合:多种类型可以自由组合使用
常见组合
// Web 日志
(ip, time/clf<[,]>, http/request", http/status, digit)
// API 日志
(time_3339, chars, json(chars@user, digit@code))
// 防火墙日志
(ip, port, time, kvarr)
🔗 相关文档
- 快速入门:01-quickstart.md - 5 分钟上手
- 核心概念:02-core-concepts.md - 深入理解类型系统
- 实战指南:03-practical-guide.md - 按任务查找解决方案
- 语言参考:04-language-reference.md - 完整类型列表
- 函数参考:05-functions-reference.md - 所有函数详解
📌 快速导航
提示:将本页面加入书签,作为 WPL 类型系统的速查手册!