我需要使用包创建一个正则表达式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},我会得到上面提到的错误.