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

时间:2017-08-01 16:44:13

标签: 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 will be a String with the substituted value
    let result = regex.replace_all(string, substitution);

    println!("{}", result);

}

结果没有替换:

*quack* klfjalksd *this* is a *test* **dfadfjkl** 

1 个答案:

答案 0 :(得分:5)

来自regex crate documentation

  

此包提供了一个用于解析,编译和执行正则表达式的库。它的语法类似于Perl风格的正则表达式,但缺少一些功能,如环顾四周和反向引用。作为交换,所有搜索都在相对于正则表达式和搜索文本的大小的线性时间内执行。

你的正则表达式使用反向引用。如果你想在Rust中使用反向引用,那么我建议fancy-regex或其他一些与另一个正则表达式引擎绑定的包,如PCRE或Oniguruma。

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