我是 Rust 和 Nom 的新手,我正在尝试解析可能包含转义引号的(单)引号字符串,例如'foo\' bar'
or 'λx → x'
, ''
or ' '
。
我找到了escaped!
宏,它的文档说:
第一个参数匹配普通字符(它不能接受控制字符),第二个参数是控制字符(如大多数语言中的 \),第三个参数匹配转义字符
由于我想在匹配器中为“普通字符”匹配除反斜杠之外的任何内容,我尝试使用take_till!
:
named!(till_backslash<&str, &str>, take_till!(|ch| ch == '\\'));
named!(esc<&str, &str>, escaped!(call!(till_backslash), '\\', one_of!("'n\\")));
let (input, _) = nom::character::complete::char('\'')(input)?;
let (input, value) = esc(input)?;
let (input, _) = nom::character::complete::char('\'')(input)?;
// … use `value`
但是,当尝试解析时'x'
,这会返回Err(Incomplete(Size(1)))
。搜索此问题时,人们通常建议使用CompleteStr
,但这不在 Nom 5 中。解决此问题的正确方法是什么?