首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在nom中解析eof或字符

在nom中解析eof或字符
EN

Stack Overflow用户
提问于 2022-10-21 22:25:43
回答 1查看 46关注 0票数 0

我在用nom库解析。我想要匹配的东西是后面的‘结束’,而不消耗它。

对于我来说,结束是eof或者是满足函数f: Fn(char) -> bool的char。

我可以将fnom::character::complete::satisfynom::bytes::take_while或许多其他nom函数结合使用。

eoff之间的不一致性使得我无法用nom组合子或自己的组合子来创作。

这是非法的,因为不透明类型:

代码语言:javascript
复制
fn end(i: &str) -> IResult<&str, &str> {
    match eof(i) {
        o @ Ok(_) => o,
        e @ Err(_) => peek(satisfy(f)),
    }
}

这也是非法的:

代码语言:javascript
复制
alt((eof, satisfy(f)))

我甚至不能做到这一点:

代码语言:javascript
复制
alt((eof, char(' ')))

我甚至不能做到这一点:(因为匹配的武器有不相容的类型?)

代码语言:javascript
复制
fn end(i: &str) -> IResult<&str, ()> {
    match eof(i) {
        o @ Ok((sur, res)) => Ok((i, ())),
        e @ Err(_) => match satisfy(f) {
            Ok(_) => Ok((i, ())),
            e @ Err(_) => e,
        },
    }
}
EN

回答 1

Stack Overflow用户

发布于 2022-10-21 23:14:06

我自己提供了一个错误,让它发挥作用:

代码语言:javascript
复制
fn end(i: &str) -> IResult<&str, ()> {
    match eof::<&str, ()>(i) {
        o @ Ok((_, _)) => Ok((i, ())),
        e @ Err(_) => match satisfy::<_, _, ()>(is_url_terminative)(i) {
            Ok(_) => Ok((i, ())),
            Err(_) => Err(nom::Err::Error(Error {
                input: i,
                code: nom::error::ErrorKind::Permutation,
            })),
        },
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74159691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档