WPL Group 逻辑
WPL 的 seq、opt、alt、some_of、not 都是分组语义,不是字段类型。
Group 类型
seq - 顺序匹配
(digit:id, chars:name, ip:addr)
seq(digit:id, chars:name, ip:addr)
要求所有字段按顺序成功匹配。
opt - 可选分组
opt(chars:tag")
整个分组可以不存在,失败时不影响规则继续匹配。
alt - 择一分组
alt(ip:addr, chars:addr)
依次尝试候选项,命中第一个成功的分组。
some_of - 重复候选分组
some_of(kvarr, ip, digit)
持续尝试候选项,直到没有任何候选还能继续匹配。
not - 负向断言分组
not(peek_symbol(ERROR):check)
内部字段不匹配时,not(...) 才成功。
关键规则
- 这些写法都作用在分组层。
- 如果某段内容可选,先把它拆成独立分组,再用
opt(...)包起来。 - 当前语法不支持分组嵌套,例如
opt(alt(...))。
正确示例:
(ip:client_ip, digit:status),
opt(chars:tag")
错误示例:
(ip:client_ip, opt(chars:tag"))
opt(alt(ip:addr, chars:domain))
输入消费
not(symbol(...))是否消费输入,取决于内部 parser 的行为。not(peek_symbol(...))更适合做不消费输入的前瞻判断。