[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: More LPeg questions
- From: Nick Gammon <nick@...>
- Date: Sun, 15 Jun 2008 08:43:08 +1000
Hello LPeg experts :) ,
I am trying to replicate some of PCRE patterns in LPeg as an
educational exercise ...
First, this PCRE pattern:
([a-z]+) and (?1)
This matches something like "fish and chips" or "fish and fish" as the
(?1) is a "subroutine call" to repeat the earlier pattern #1.
This seems to be easy in LPeg, as it lets you break patterns down,
like this:
require "lpeg"
word = lpeg.C (lpeg.R ("az")^1)
phrase = word * " and " * word
print (lpeg.match (phrase, "fish and chips")) --> fish chips
print (lpeg.match (phrase, "fish and fish")) --> fish fish
--------
However the next case is a bit harder. In PCRE:
([a-z]+) and \1
This matches "fish and fish" but NOT "fish and chips" because the \1
means "match the exact same thing as pattern 1" (not the same type of
thing).
The best I could do in LPeg is this:
require "lpeg"
word = lpeg.C (lpeg.R ("az")^1)
phrase = word *
" and " *
lpeg.Cmt (word * lpeg.Cb (2),
function (s, i, a, b) return a == b end)
print (lpeg.match (phrase, "fish and chips")) --> nil
print (lpeg.match (phrase, "fish and fish")) --> fish
Is this the best way of achieving this?
---------
On the web page http://www.inf.puc-rio.br/~roberto/lpeg/re.html you
mention that the lpeg.Cb is an experimental feature. What is its
current status? The example at the bottom ("The next example mathes
Lua long strings:") uses it, so presumably you are reasonably keen on
it.
By the way, there is a typo there (the word "mathes").
---------
LPeg is current version 0.8.1 - is there any projected release date
for version 1? Presumably this will be a stable version with its
features frozen.
---------
The makefile that ships with LPeg 0.8.1 mentions one of Roberto's
directories explicitly:
LUADIR = /home/roberto/prj/sw/oldlua/lua-5.1.2/src
Perhaps that should be changed in future. I tried to write to Roberto
privately about that, but unfortunately the anti-spam software at his
email address rejected my email for some reason. Apparently my IP
address in on some SORBS list, however my Internet provider is Telstra
BigPond, the largest provider of Internet connectivity in Australia,
and the operator of the telephone network.
Best regards,
- Nick