2
我想寫一個匹配文件系統路徑的PEG。一個路徑元素是除了在posix linux中的/
之外的任何字符。解析器表達式語法 - 如何匹配除單個字符之外的任何字符串?
PEG中有一個匹配any
字符的表達式,但我無法弄清楚如何匹配除一個字符之外的任何字符。
我使用的peg解析器是生鏽的PEST。
我想寫一個匹配文件系統路徑的PEG。一個路徑元素是除了在posix linux中的/
之外的任何字符。解析器表達式語法 - 如何匹配除單個字符之外的任何字符串?
PEG中有一個匹配any
字符的表達式,但我無法弄清楚如何匹配除一個字符之外的任何字符。
我使用的peg解析器是生鏽的PEST。
你可以找到https://docs.rs/pest/0.4.1/pest/macro.grammar.html#syntax害蟲語法,尤其是有「負前瞻」
!a
- 如果a
匹配不匹配不進取
所以,你可以寫
!["/"] ~ 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());
}