#regex #api-bindings #safe-bindings #api #tre

tre-regex

Rust对TRE正则表达式模块的安全绑定

6个版本 (3个破坏性版本)

0.4.1 2024年3月15日
0.4.0 2024年3月15日
0.3.0 2023年6月17日
0.2.1 2023年6月16日
0.1.1 2023年6月15日

文本处理中排名第458

Download history 56/week @ 2024-04-09 8/week @ 2024-04-16

每月下载量173

BSD-2-Clause

79KB
938

tre-regex

TRE正则表达式引擎的安全API绑定。

文档可在docs.rs找到。

应适用于Rust 1.70.0及以上版本。如果您发现其他情况,请报告。

功能

  • wchar: 启用wchar支持(绑定器尚未支持,但将在tre-regex-sys中启用)。默认启用。
  • approx: 启用近似匹配支持。默认启用。
  • vendored: 使用tre-regex-sys的TRE副本;否则使用系统TRE。默认启用。

lib.rs:

这些是对tre_regex_sys模块的安全绑定。

这些绑定旨在尽可能提供类似于Rust的API,以访问TRE库。除了TRE中的reguexec之外,大部分TRE API都得到了支持;这很棘手实现,但自己使用起来应该相当简单。

此库使用Rust std::borrow::Cow字符串来启用正则表达式匹配的零拷贝。

示例

提供了两种API:函数API和对象API。您可以选择使用哪种,尽管函数API作为对象API的薄包装实现。

对象API

use tre_regex::{RegcompFlags, RegexecFlags, Regex};

let regcomp_flags = RegcompFlags::new().add(RegcompFlags::EXTENDED);
let regexec_flags = RegexecFlags::new().add(RegexecFlags::NONE);

let compiled_reg = Regex::new("^([[:alnum:]]+)[[:space:]]*([[:alnum:]]+)$", regcomp_flags)?;
let matches = compiled_reg.regexec("hello world", 2, regexec_flags)?;

for (i, matched) in matches.into_iter().enumerate() {
    match matched {
        Some(res) => {
            match res {
                Ok(substr) => println!("Match {i}: '{}'", substr),
                Err(e) => println!("Match {i}: <Error: {e}>"),
            }
        },
        None => println!("Match {i}: <None>"),
    }
}

函数API

use tre_regex::{RegcompFlags, RegexecFlags, regcomp, regexec};

let regcomp_flags = RegcompFlags::new().add(RegcompFlags::EXTENDED);
let regexec_flags = RegexecFlags::new().add(RegexecFlags::NONE);

let compiled_reg = regcomp("^([[:alnum:]]+)[[:space:]]*([[:alnum:]]+)$", regcomp_flags)?;
let matches = regexec(&compiled_reg, "hello world", 2, regexec_flags)?;

for (i, matched) in matches.into_iter().enumerate() {
    match matched {
        Some(res) => {
            match res {
                Ok(substr) => println!("Match {i}: '{}'", substr),
                Err(e) => println!("Match {i}: <Error: {e}>"),
            }
        },
        None => println!("Match {i}: <None>"),
    }
}

依赖关系

~0.5–2.4MB
~50K SLoC