Rust 如何解析&;带命名参数的str?

Rust 如何解析&;带命名参数的str?,rust,nom,Rust,Nom,我试图找到解析&str并提取命令类型和命名参数的最佳方法。命名参数可以是任何东西 这是建议的字符串(可以更改) 我一直在尝试几种方法来提取命令类型,这似乎相当简单: pub fn parse_command(command: &str) -> Option<String> { let mut matched = String::new(); let mut chars = command.chars(); while let Some(next

我试图找到解析
&str
并提取
命令类型和命名参数的最佳方法。命名参数可以是任何东西

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

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

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_命令(命令:&str)->选项{
让mut matched=String::new();
让mut chars=command.chars();
而让一些(next)=chars.next(){
如果下一步!='('{
匹配。推(下一步);
}否则{
打破
}
}
如果匹配。是否为空(){
没有一个
}否则{
一些(匹配)
}
}
从括号中提取参数似乎很简单:

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
    }
}
pub fn parse_参数(命令:&str)->选项{
让start=command.find(“”);
让end=command.rfind(“)”;
如果start.is_some()&&end.is_some(){
Some(&命令[start.unwrap()+1..end.unwrap()]
}否则{
没有一个
}
}
我一直在看这个板条箱,它看起来相当强大(而且复杂),所以我不确定我是否真的需要使用它


如何将括号中的命名参数提取到一个
HashMap

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


但是,如果要单独解析每个参数,则可能会遇到问题:您的格式似乎已损坏。在您的示例中,双引号和逗号都没有转义字符。
param2
无法完全提取。

@James:comma可能无法转义:)确实,如果您的格式处理引号,您可能不需要转义逗号
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
    }
}