如何使用lalrop解析由"in rust"引用的字符串?
Str: Vec<u8> = {
"\"" <s:r"([^\"])*"> "\"" => {
s.bytes().collect()
},
};
这不起作用,我试着将\
放在不同的位置,但没有弄清楚,因为文档中没有太多关于regex的内容.
如何使用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).
"([^\"])*"