Rust 使用Nom 5的转义引号分析单引号字符串

Rust 使用Nom 5的转义引号分析单引号字符串,rust,nom,Rust,Nom,我不熟悉Rust和Nom,我正在尝试解析一个(单个)带引号的字符串,该字符串可能包含转义引号,例如,'foo\'在所谓的流模式下运行时,Nom可能返回不完整的,以表明它无法决定并且需要更多数据。nom4引入了CompleteStr。除了completebytesicle,它们是&str和&u8]的完整输入对应项。解析器将它们作为完整模式下的输入工作 它们在nom5中消失了。正如您所观察到的,在nom5中,基于宏的解析器总是在流模式下工作。对于在流模式和完成模式下工作不同的解析器组合器,它们在不同

我不熟悉Rust和Nom,我正在尝试解析一个(单个)带引号的字符串,该字符串可能包含转义引号,例如,
'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,但我仍然在使用许多宏,因为如果我去看的话,很少有组合符,而且没有任何组合符ike
escaped
take\u till
。对于字节,有一个
escaped
函数(),但我不是在处理字节,而是在处理(unicode)文本。谢谢!我在(false)下给人的印象是,
nom::bytes
中的函数对
&str
不起作用,但如果我将分隔符从单引号改为例如。