如何使用命名参数解析 &str?

  • 本文关键字:str 参数 何使用 rust nom
  • 更新时间 :
  • 英文 :


我正在尝试找到解析&str并提取COMMAND_TYPE和命名参数的最佳方法。命名参数可以是任何内容。

这是建议的字符串(可以更改(。

COMMAND_TYPE(param1:2222,param2:"the quick "brown" fox, blah,", param3:true)

我一直在尝试几种方法来提取COMMAND_TYPE,这似乎相当简单:

pub fn parse_command(command: &str) -> Option<String> {
let mut matched = String::new();
let mut chars = command.chars();
while let Some(next) = chars.next() {
if next != '(' {
matched.push(next);
} else {
break;
}
}
if matched.is_empty() {
None
} else {
Some(matched)
}
}

从括号中提取参数似乎很简单:

pub fn parse_params(command: &str) -> Option<&str> {
let start = command.find("(");
let end = command.rfind(")");
if start.is_some() && end.is_some() {
Some(&command[start.unwrap() + 1..end.unwrap()])
} else {
None
}
}

我一直在看 nom 板条箱,它似乎相当强大(而且复杂(,所以我不确定我是否真的需要使用它。

如何将括号之间的命名参数提取到HashMap中?

您的代码似乎可用于提取命令和完整参数列表。如果你不需要解析比这更复杂的东西,你可以避免使用 nom 作为依赖项。

但是如果你想单独解析每个参数,你可能会遇到问题:你的格式似乎被破坏了。在您的示例中,没有双引号或逗号的转义符。param2只是无法干净地提取。

相关内容

  • 没有找到相关文章

最新更新