Rust 使用Nom 5的转义引号分析单引号字符串
我不熟悉Rust和Nom,我正在尝试解析一个(单个)带引号的字符串,该字符串可能包含转义引号,例如,Rust 使用Nom 5的转义引号分析单引号字符串,rust,nom,Rust,Nom,我不熟悉Rust和Nom,我正在尝试解析一个(单个)带引号的字符串,该字符串可能包含转义引号,例如,'foo\'在所谓的流模式下运行时,Nom可能返回不完整的,以表明它无法决定并且需要更多数据。nom4引入了CompleteStr。除了completebytesicle,它们是&str和&u8]的完整输入对应项。解析器将它们作为完整模式下的输入工作 它们在nom5中消失了。正如您所观察到的,在nom5中,基于宏的解析器总是在流模式下工作。对于在流模式和完成模式下工作不同的解析器组合器,它们在不同
'foo\'在所谓的流模式下运行时,Nom
可能返回不完整的,以表明它无法决定并且需要更多数据。nom
4引入了CompleteStr
。除了completebytesicle
,它们是&str
和&u8]
的完整输入对应项。解析器将它们作为完整模式下的输入工作
它们在nom
5中消失了。正如您所观察到的,在nom
5中,基于宏的解析器总是在流模式下工作。对于在流模式和完成模式下工作不同的解析器组合器,它们在不同的子模块中有不同的版本,例如nom::bytes::streaming
和nom::bytes::complete
对于所有这些血淋淋的细节,您可能想要查看,特别是流与完整解析器部分
此外,在nom
5中,函数组合符优于宏组合符。以下是一种方法:
/#nom=“5.0.1”
使用名称::{
分支::alt,
字节::完成::{转义,标记},
字符::完整::无,
序列::分隔,
IResult,
};
fn main(){
let(_,res)=parse_quoted(r#“'foo\”看起来,您(仍然)在使用nom4。有一个新版本(5)哪种类型的宏淘汰了宏,例如,名称!
而使用函数。你可以看看@hellow:也许这就是断开连接的地方?我很可能误解了什么…我实际上使用的是Nom 5.0.1,但我仍然在使用许多宏,因为如果我去看的话,很少有组合符,而且没有任何组合符ikeescaped
或take\u till
。对于字节,有一个escaped
函数(),但我不是在处理字节,而是在处理(unicode)文本。谢谢!我在(false)下给人的印象是,nom::bytes
中的函数对&str
不起作用,但如果我将分隔符从单引号改为例如。