lua-users home
lua-l archive

Re: lpeg pattern repetition

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


Another thing I can't get to work is something simple like this:
I want to match on "Nick says hello" where "Nick" can vary. That is, in regular expression syntax:
.* says hello
I tried to do this in LPeg like so:
print (lpeg.match (lpeg.P (1)^0 * " says hello",
 "Nick says hello")) --> nil
I am guessing that the lpeg.P (1) is so greedy it is consuming the " says hello" part as well. But if that is the case, how can that sort of thing be easily expressed? Another example would be:
.* says .*
That would be useful for general decoding of conversations. <someone> says <something> The only way I can get my first example to work is by specifying the character set for the name, like this:
print (lpeg.match (lpeg.R ("AZ", "az")^0 * " says hello",
 "Nick says hello")) --> 16
That works, but only because I have excluded a space.
If I wanted to match on "Nick the programmer says hello", then I need a space in the matching set, and then it consumes " says hello" as well.
By way of comparison, this works:
print (string.match ("Nick says hello", ".* says hello")) --> Nick says hello
Thanks for any helpful suggestions you can make. :)
- Nick Gammon

AltStyle によって変換されたページ (->オリジナル) /