【问题标题】:Need help to understand LPeg and PEGs需要帮助以了解 LPeg 和 PEG
【发布时间】:2013-10-27 21:04:38
【问题描述】:

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

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得到优先选择运算符/的功能

任何帮助将不胜感激!

【问题讨论】:

    标签: lua peg lpeg


    【解决方案1】:

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

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

    【讨论】:

    • 一般来说,只要 LPEG 可以接受一个模式作为参数,它也可以接受一个普通数字(或字符串,或布尔值等),并使用 lpeg.P( )。而 lpeg.P(1) 的意思是“任何字符”。
    猜你喜欢
    • 2017-06-19
    • 2016-05-03
    • 1970-01-01
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多