1 个稳定版本
使用旧的Rust 2015
1.1.0 | 2020年5月23日 |
---|
#5 在 #grok
用于 grop
32KB
510 行
grok
grok
库允许您快速解析和匹配可能无结构的数据到结构化结果。它在解析各种日志文件时特别有用。这个 Rust 版本主要是从 Java 版本 移植而来,而该版本又从原始的 Ruby 版本 中汲取灵感。
用法
将此添加到您的 Cargo.toml
[dependencies]
grok = "1.1"
并将此添加到您的crate根目录
extern crate grok;
以下是一个简单示例,它存储一个模式,编译它,然后将其与一行匹配
extern crate grok;
use grok::Grok;
fn main() {
// Instantiate Grok
let mut grok = Grok::default();
// Insert a definition which might be a regex or an alias
grok.insert_definition("USERNAME", r"[a-zA-Z0-9._-]+");
// Compile the definitions into the pattern you want
let pattern = grok.compile("%{USERNAME}", false)
.expect("Error while compiling!");
// Match the compiled pattern against a string
match pattern.match_against("root") {
Some(m) => println!("Found username {:?}", m.get("USERNAME")),
None => println!("No matches found!"),
}
}
请注意,编译模式是一个昂贵的操作,所以它非常类似于普通正则表达式处理,应该只执行一次,然后可以在循环或迭代器中反复调用模式的 match_against
方法。返回的模式不受原始grok实例生命周期的限制,因此可以自由传递。为了性能原因,返回的 Match
绑定到模式的生命周期,因此请将它们放在一起或根据需要克隆/复制包含的结果。
许可证
grok
在Apache许可证(版本2.0)的条款下分发。有关详细信息,请参阅LICENSE。
依赖关系
~3MB
~96K SLoC