[英]How to parse &str with named parameters?
我试图找到解析&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 crate,它看起来相当强大(而且很复杂),所以我不确定我是否真的需要使用它。
如何将括号之间的命名参数提取到HashMap
?
您的代码似乎适用于提取命令和完整参数列表。 如果您不需要解析比这更复杂的东西,您可能可以避免使用 nom 作为依赖项。
但是如果您想单独解析每个参数,您可能会遇到问题:您的格式似乎已损坏。 在您的示例中,双引号和逗号都没有转义字符。 param2
只是不能干净地提取。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.