小编sch*_*zzz的帖子

如何从用户提供的包含正则表达式元字符的字符串创建正则表达式?

我需要使用包创建一个正则表达式regex,包括作为传递给程序的命令行参数传递的字符串.命令行参数可以包含${}.

如果我硬编码字符串r"...",那么它工作正常,但如果我使用命令行参数format!(r#"{}"#, arg_str),我得到以下错误(假设arg_str= ${replace}):

thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Syntax(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
regex parse error:
    ${replace}
      ^
error: decimal literal empty
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
)', libcore/result.rs:945:5
note: Run with `RUST_BACKTRACE=1` for a backtrace.
Run Code Online (Sandbox Code Playgroud)

用于演示此问题的简化代码示例:

extern crate regex;
use regex::Regex;

fn main() {
    let args: Vec<_> = std::env::args().collect();
    let ref arg_str = args[1];

    let re = Regex::new(format!(r#"{}"#, arg_str).as_str()).unwrap();
    println!("{:?}", re);
}
Run Code Online (Sandbox Code Playgroud)

如果这是用一个简单的参数运行,replace没有错误,但如果我传递类似的东西${replace},我会得到上面提到的错误.

regex rust

2
推荐指数
1
解决办法
832
查看次数

标签 统计

regex ×1

rust ×1