【发布时间】:2015-01-16 12:46:44
【问题描述】:
要匹配以dog 开头,后跟cat(但不使用cat)的字符串,这样可以:
local lpeg = require 'lpeg'
local str1 = 'dogcat'
local patt1 = lpeg.C(lpeg.P('dog')) * #lpeg.P('cat')
print(lpeg.match(patt1, str1))
输出:dog
要匹配以dog 开头的字符串,然后是任何字符序列,然后是cat(但不使用它),例如正则表达式前瞻(dog.+?)(?=cat),我尝试了这个:
local str2 = 'dog and cat'
local patt2 = lpeg.C(lpeg.P("dog") * lpeg.P(1) ^ 1) * #lpeg.P("cat")
print(lpeg.match(patt2, str2))
我的预期结果是dog and,但它返回nil。
如果我丢弃前瞻部分(即使用模式lpeg.C(lpeg.P("dog") * lpeg.P(1) ^ 1)),它可以成功匹配整个字符串。这意味着* lpeg.P(1) ^ 1 部分正确匹配任何字符序列,不是吗?
如何解决?
【问题讨论】: