Regex 如何使用Rust中带有反向引用的正则表达式替换正则表达式字符串?

Regex 如何使用Rust中带有反向引用的正则表达式替换正则表达式字符串?,regex,replace,rust,Regex,Replace,Rust,我正在尝试下面的代码,但是,它适用于其他语言,但不适用于Rust #[test] fn regex_test() { let regex = Regex::new(r"(\*|_)(.*?)\1").unwrap(); let string = "*quack* klfjalksd *this* is a *test* **dfadfjkl** "; let substitution = "<em>$2</em>"; // result

我正在尝试下面的代码,但是,它适用于其他语言,但不适用于Rust

#[test]
fn regex_test() {
    let regex = Regex::new(r"(\*|_)(.*?)\1").unwrap();
    let string = "*quack* klfjalksd *this* is a *test* **dfadfjkl** ";
    let substitution = "<em>$2</em>";

    // result will be a String with the substituted value
    let result = regex.replace_all(string, substitution);

    println!("{}", result);

}
从:

这个板条箱提供了一个用于解析、编译和执行正则表达式的库。它的语法类似于Perl风格的正则表达式,但缺少一些特性,如查找和反向引用。作为交换,所有搜索都以线性时间执行,与正则表达式和搜索文本的大小有关

您的正则表达式使用反向引用。如果您想在Rust中使用反向引用,那么我建议您使用或使用其他绑定到另一个正则表达式引擎(如PCRE或Oniguruma)的板条箱

在这种情况下,对于regex 0.2.x,\1被解释为八进制转义,它对应于Unicode代码点U+0001。

来自:

这个板条箱提供了一个用于解析、编译和执行正则表达式的库。它的语法类似于Perl风格的正则表达式,但缺少一些特性,如查找和反向引用。作为交换,所有搜索都以线性时间执行,与正则表达式和搜索文本的大小有关

您的正则表达式使用反向引用。如果您想在Rust中使用反向引用,那么我建议您使用或使用其他绑定到另一个正则表达式引擎(如PCRE或Oniguruma)的板条箱


在本例中,对于regex 0.2.x,\1被解释为八进制转义,它对应于Unicode代码点U+0001。

到目前为止,我已经尝试了fancy regex和onig,但他们也无法做到这一点,或者如果可以,则替换的语法没有文档记录。您可能需要自己实现替换,但它们都支持反向引用,这是您遇到的基本问题。到目前为止,我已经尝试了fancy regex和onig,但他们也无法做到这一点,或者如果可以的话,替换的语法是未记录的。您可能需要自己实现替换,但它们都支持反引用,这是您遇到的基本问题。
*quack* klfjalksd *this* is a *test* **dfadfjkl**