需要帮助来理解LPeg和PEGs

时间:2013-10-18 21:44:59

标签: lua peg lpeg

以下模式(来自this page)仅匹配具有平衡括号的字符串:

b = lpeg.P{ "(" * ((1 - lpeg.S"()") + lpeg.V(1))^0 * ")" }

1-中的1 - lpeg.S"()"是什么意思?

function gsub (s, patt, repl)
  patt = lpeg.P(patt)
  patt = lpeg.Cs((patt / repl + 1)^0)
  return lpeg.match(patt, s)
end

+1中的patt / repl + 1是什么意思?

我仍然没有完全从这个paper获得优先选择运算符/的功能

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:5)

1中的1 - lpeg.S"()"表示任何字符。整个语句可以读作,匹配任何字符,而不匹配集合"()"中的字符。

+1是相同的想法,如果repl是字符串,那么patt / repl + 1匹配模式patt,然后用字符串repl替换它的捕获或跳过一个角色。