11个版本 (5个稳定版本)
2.0.0 | 2022年6月7日 |
---|---|
1.2.0 | 2021年3月12日 |
1.1.0 | 2019年10月30日 |
1.0.0 | 2019年3月28日 |
0.4.1 | 2017年11月15日 |
#288 在 文本处理
14,541 每月下载量
在 6 个crates (5个直接使用)
32KB
585 行
grok
grok
库允许您快速解析和将可能无结构的文件解析为结构化的结果。它在解析各种类型的日志文件时特别有用。这个Rust版本主要是由Java版本移植而来,而Java版本则受到了Ruby版本的启发。
使用方法
将以下内容添加到您的Cargo.toml
[dependencies]
grok = "2.0"
以下是一个简单的例子,它存储一个模式,编译它,然后在上面匹配一行
use grok::Grok;
fn main() {
// Instantiate Grok
let mut grok = Grok::default();
// Add a pattern which might be a regex or an alias
grok.add_pattern("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
绑定到模式的生命周期,所以请将它们放在一起或根据需要克隆/复制包含的结果。
更多信息
此库依赖于onig进行正则表达式执行,而onig本身是强大的Oniguruma正则表达式库的Rust绑定。如果您不确定为什么特定的正则表达式不起作用,这是查找更多信息的最佳位置,例如支持哪些模式以及如何使用高级功能。
许可证
grok
在Apache License(版本2.0)的条款下分发。有关详细信息,请参阅LICENSE。
依赖关系
~3MB
~96K SLoC