如何在使用Rust的正则表达式包时逃脱转义的正则表达式字符?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在使用Rust的正则表达式包时逃脱转义的正则表达式字符?相关的知识,希望对你有一定的参考价值。
我有一个正则表达式,有许多"
和逃脱字符。我测试了我的正则表达式,你可以找到my working live demo。我将正则表达式转移到了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
正则表达式文档向我指出了raw string文档。我玩弄了不同的逃避技术,但无法弄清楚我搞砸了哪里。
答案
您的原始模式需要写为
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#"
和"#
内。
请参考Rust raw string literals reference:
原始字符串文字不处理任何转义。他们从角色
U+0072
(r
)开始,然后是零个或多个角色U+0023
(#
)和U+0022
(双引号)角色。原始字符串体可以包含任何Unicode字符序列,并且仅由另一个U+0022
(双引号)字符终止,后跟在开头U+0023
(双引号)字符之前的相同数量的#
(U+0022
)字符。
以上是关于如何在使用Rust的正则表达式包时逃脱转义的正则表达式字符?的主要内容,如果未能解决你的问题,请参考以下文章