【发布时间】:2021-10-25 21:46:10
【问题描述】:
我正在尝试用 a 和 b 的组合捕获一个字符串,但总是以 b 结尾。换句话说:
local patt = S'ab'^0 * P'b'
匹配 aaab 和 bbabb 但不匹配 aaa 或 bba。但是,以上内容不匹配任何内容。这是因为S'ab'^0 是贪婪的并且匹配最终的b?我认为是这样,除了可能诉诸lpeg.Cmt 之外,我想不出任何替代方案,这似乎有点矫枉过正。但也许不是,有人知道如何匹配这样的模式吗?我看到了this question,但解决方案的问题在于它会停在第一个结束标记处(即那里的“猫”,这里的“b”),就我而言,我需要接受中间的“b”。
附: 我实际上想要做的是匹配一个最外层规则是函数调用的表达式。 例如
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。
【问题讨论】: