如何在使用Rust';什么是regex板条箱?
我有一个正则表达式,它有许多转义字符。和如何在使用Rust';什么是regex板条箱?,regex,rust,escaping,Regex,Rust,Escaping,我有一个正则表达式,它有许多转义字符。和\我测试了我的正则表达式,你可以找到。我将正则表达式转换为Rust。下面是一个不起作用的简化示例: extern crate regex; // 1.1.0 use regex::Regex; fn main() { let re = Regex::new(r#"123 \\""(\w+)"#).unwrap(); let test = "123 \"PROPFIND\""; for cap in re.captures_ite
\
我测试了我的正则表达式,你可以找到。我将正则表达式转换为Rust。下面是一个不起作用的简化示例:
extern crate regex; // 1.1.0
use regex::Regex;
fn main() {
let re = Regex::new(r#"123 \\""(\w+)"#).unwrap();
let test = "123 \"PROPFIND\"";
for cap in re.captures_iter(test) {
println!("{}", &cap[1]);
}
}
我的示例的输出为空,但我希望PROPFIND
regex文档向我指出了文档。我使用了不同的转义技术,但不知道哪里出了问题。您的原始模式需要按照
let re = Regex::new(r#"(\d{1,3}(?:\.\d{1,3}){3}) (\w+|-) (\w+|-) \[(.*?)\] "(\w+) (.*?) (HTTPS?)/([0-9]\.[0-9])" ([0-9]+) ([0-9]+) "(\w+|-)" "(.*?)""#).unwrap();
当前版本为:
let re = Regex::new(r#"123 "(\w+)""#).unwrap();
简言之,模式中的所有\\\”“
都应该类似于“
。并确保图案位于r#“
和”#
内
请参阅:
原始字符串文本不处理任何转义。它们以字符U+0072
(r
)开头,然后是零个或多个字符U+0023
(#
)和U+0022
(双引号)字符。原始字符串正文可以包含任何Unicode字符序列,并且仅以另一个U+0022
(双引号)字符结尾,后跟开头U+0022
(双引号)字符之前相同数量的U+0023
(
)字符
当您将正则表达式简化为只测试一件事情时会发生什么情况,例如IP地址或任何其他一件事情?请参阅。感谢您的提示,我将尝试逐个匹配以跟踪问题。您不需要在原始字符串中转义引号,请使用如下输入:注意
(HTTP | HTTPS)
=(HTTPS?)
在模式中,必须对数字之间的点进行转义,以匹配文字点。@WiktorStribiżew感谢您的提示。我的问题通常是我不明白我还必须删除常规的正则转义。但现在我明白了。非常感谢。@createproblem\w
是正则表达式转义,您不应该删除它。双引号不是特殊的,不应该用正则表达式转义。另外,您实际上将模式中的双引号加倍,因此它不可能找到匹配项。