如何使用lalrop解析由"in rust"引用的字符串?

Str: Vec<u8> = {
    "\"" <s:r"([^\"])*"> "\"" => {
        s.bytes().collect()
    },
};

这不起作用,我试着将\放在不同的位置,但没有弄清楚,因为文档中没有太多关于regex的内容.

推荐答案

Lalrop的documentation人特别谈到了这一点:

如果需要嵌入引号,可以使用散列,比如r#"..."..."#.

在Ruust中,r"..."raw string,这意味着所有非引号字符都是按字面意思理解的,包括\.原始字符串没有转义字符,但当您将r#"而不是r"放在开头时,字符串不会结束,直到它找到"#.您可以使用任意数量的#个字符来执行此操作,因此它们都是相同的字符串.

"hello"
r"hello"
r#"hello"#
r##"hello"##
r###"hello"###

诸若此类.这允许您转义任何"后面跟着任何数量的#,并且有足够的#个符号.

这一切对这件事(以及大多数事情)来说有点过头了.对于您的正则表达式,您只需要一组周围的#,如文档所示,如下所示.

r#"([^"])*"#

但是,如果您想要一个不包括"#的正则表达式,您可以这样做:

r##"([^"#])*"##

请注意,这样做是因为正则表达式经常使用大量的\,这会使转义它变得很麻烦.你也可以把一个普通的字符串加上一个转义的引号(至少在Ruust中是这样,我还没有试过用lalrop).

"([^\"])*"

Rust相关问答推荐

如何在不安全的代码中初始化枚举 struct

基于对vec值的引用从该值中删除该值

Rust kill std::processs::child

在使用#[NO_STD]时,如何在Rust中收到紧急消息?

如何循环遍历0..V.len()-1何时v可能为空?

在Rust中是否可以使用Rc自动化约束传播

将PathBuf转换为字符串

函数内模块的父作用域的访问类型

如何将映射反序列化为具有与键匹配的字段的定制 struct 的向量?

Rust编译器似乎被结果类型与anyhow混淆

Rust移动/复制涉及实际复制时进行检测

为什么 tokio 在以奇怪的方式调用时只运行 n 个任务中的 n-1 个?

Rust 中的静态引用

将泛型中的 Box 转换为 rust 中的 Box

Rust 中的内存管理

由特征键控的不同 struct 的集合

rust tokio::spawn 在 mutexguard 之后等待

为什么允许重新分配 String 而不是 *&String

隐式类型闭包的错误生命周期推断

Cargo:如何将整个目录或文件包含在功能标志中?