parsing - 解析器表达式语法 - 如何匹配不包括单个字符的任何字符串?

标签 parsing rust grammar peg pest

我想编写一个匹配文件系统路径的 PEG。路径元素是 posix linux 中除 / 之外的任何字符。

PEG 中有一个表达式可以匹配任何 字符,但我不知道如何匹配除一个字符以外的任何字符。

我使用的 peg 解析器是 PEST for rust。

最佳答案

您可以在 https://docs.rs/pest/0.4.1/pest/macro.grammar.html#syntax 中找到 PEST 语法,特别是有一个“负面前瞻”

!a — matches if a doesn't match without making progress

所以你可以这样写

!["/"] ~ any

例子:

// cargo-deps: pest

#[macro_use] extern crate pest;
use pest::*;

fn main() {
    impl_rdp! {
        grammar! {
            path = @{ soi ~ (["/"] ~ component)+ ~ eoi }
            component = @{ (!["/"] ~ any)+ }
        }
    }

    println!("should be true: {}", Rdp::new(StringInput::new("/bcc/cc/v")).path());
    println!("should be false: {}", Rdp::new(StringInput::new("/bcc/cc//v")).path());
}

关于parsing - 解析器表达式语法 - 如何匹配不包括单个字符的任何字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43269689/

相关文章:

json - 如何在 NodeJS 中成功解析 FFMpeg 的输出

php - PHP页面在以下代码的第9行显示了解析错误,请帮助解决此问题

java - java中的类型安全解析

ruby - 在 Ruby 中逐字节读取二进制

rust - Bevy "scope"如何根据参数类型对其系统进行处理?

Rust:错误 [E0495]:由于需求冲突,无法推断出 autoref 的适当生命周期

反序列化 reqwest 响应时找不到 json 方法

c++ - 为什么我可以用多个字符串文字构造一个字符串?

grammar - 这种语言的正确语法是什么?

javascript - 为什么匿名函数本身是 javascript 中的语法错误?