要匹配以 开头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
(但不使用它),例如正则表达式 lookahead (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
part 正确匹配任何字符序列,不是吗?
如何解决?