gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:03:00 26 4
gpt4 key购买 nike

我需要使用 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.

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

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);
}

如果使用像 replace 这样的简单参数运行,则没有错误,但是如果我向它传递类似 ${replace} 的东西,我会得到提到的错误以上。

最佳答案

regex crate 有一个函数 escape 可以满足你的需要。

来自documentation :

Function regex::escape

pub fn escape(text: &str) -> String

Escapes all regular expression meta characters in text.
The string returned may be safely used as a literal in a regular expression.

因此,通过 regex::escape 传递您的 arg_str 应该可以解决您的问题。

关于regex - 如何从用户提供的包含正则表达式元字符的字符串创建正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44196388/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com