2013-10-18 110 views
7

以下模式(從this page)只用字符串平衡括號匹配:需要幫助瞭解LPEG和PEG的

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 

是什麼在patt/repl + 1+1是什麼意思?

我仍然沒有完全從這個paper

任何幫助將不勝感激得到優先選擇運營商/的功能非常好!

回答

4

1 in 1 - lpeg.S"()"表示任何字符。整個語句可以被讀作,匹配任何字符,但不匹配集合"()"中的字符。

+1是同樣的想法,如果repl是一個字符串,然後patt/repl + 1匹配模式patt然後替換它的捕獲與字符串repl或跳過一個字符。

+1

通常,每當LPEG可以接受的圖案作爲參數,它可能還接受一個普通的數字(或字符串或布爾等)和將利用lpeg.P它隱式轉換的圖案()。而lpeg.P(1)的意思是「任何角色」。 – mpeterv