我正在尝试为 Rust 中的一个项目学习 NOM。我有一个文本文件,其中包括:
[tag="#43674"]char[/tag]
每行有多个标签背靠背。我正在尝试提取“#43674”和“char”,将它们存储在一个元组中(x, y)
,然后将它们推送到Vec<(x, y)>
文本文件每一行的向量中。到目前为止,我已经成功地将解析器组合成两个函数;一个用于“#43674”,一个用于“char”,然后我将它们组合在一起返回<IResult<&str, (String, String)>
。这是代码:
fn color_tag(i: &str) -> IResult<&str, &str> {
delimited(tag("[color="), take_until("]"), tag("]"))(i)
}
fn char_take(i: &str) -> IResult<&str, &str> {
terminated(take_until("[/color]"), tag("[/color]"))(i)
}
pub fn color_char(i: &str) -> IResult<&str, (String, String)> {
let (i, color) = color_tag(i)?;
let (i, chara) = char_take(i)?;
let colors = color.to_string();
let charas = chara.to_string();
let tuple = (colors, charas);
Ok((i, tuple))
}
如何在文本文件的给定行上迭代此函数?我已经有一个将文本文件迭代成行的函数,但是我需要color_char
为该行中的每个闭包重复。我完全错过了重点吗?