需要帮助理解LPeg和PEGs。

下面的模式(从这个页面中)仅匹配带有平衡括号的字符串:

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

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

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

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

我仍然不能很好地理解优先选择运算符/的功能,来自此paper

任何帮助将不胜感激!

点赞
用户415823
用户415823

1 - lpeg.S"()" 中的 1 表示任何字符。整个语句的意思是,在不匹配集合 "()" 中的字符的情况下匹配任何字符。

+1 也是同样的思路,如果 repl 是一个字符串,那么 patt / repl + 1 匹配模式 patt,然后用字符串 repl 替换其捕获结果或跳过一个字符。

2013-10-19 00:35:18