我正在尝试用 a 和 b 的组合捕获一个字符串,但总是以 b 结尾。换句话说:
local patt = S'ab'^0 * P'b'
匹配aaab
andbbabb
但不匹配aaa
or bba
。但是,以上内容不匹配任何内容。这是因为S'ab'^0
贪心而匹配决赛b
吗?lpeg.Cmt
我是这么认为的,除了求助于这似乎有点矫枉过正之外,我想不出任何替代方案。但也许不是,有人知道如何匹配这样的模式吗?我看到了这个问题,但是解决方案的问题在于它会停在第一个结束标记处(即那里的“猫”,这里的“b”),就我而言,我需要接受中间的“b”。
PS我实际上想要做的是匹配一个最外层规则是函数调用的表达式。例如
func();
func(x)(y);
func_arr[z]();
全部匹配,但
exp;
func()[1];
4 + 5;
不要。我的语法的其余部分有效,我很确定这归结为同一个问题,但为了完整起见,我正在使用的语法看起来像:
top_expr = V'primary_expr' * V'postfix_op'^0 * V'func_call_op' * P';';
postfix_op = V'func_call_op' + V'index_op';
同样地,我最终会V'postfix_op'^0
吃掉func_call_op
我所期待的东西。