The following pattern (from this page) matches only strings with balanced parentheses:
b = lpeg.P{ "(" * ((1 - lpeg.S"()") + lpeg.V(1))^0 * ")" }
What does 1-
in 1 - lpeg.S"()"
mean?
function gsub (s, patt, repl)
patt = lpeg.P(patt)
patt = lpeg.Cs((patt / repl + 1)^0)
return lpeg.match(patt, s)
end
What does the +1
in patt / repl + 1
mean?
And I still not quite get the function of prioritized choice operator /
very well from this paper
Any help will be appreciated!
The 1
in 1 - lpeg.S"()"
means any character. The whole statement can be read as, match any character while not matching a character in the set "()"
.
The +1
is the same idea, if repl
is a string then patt / repl + 1
matches pattern patt
and then replaces it's capture with the string repl
or skips a character.