lua不处理string.find或string.match中的锚点

时间:2016-09-04 03:27:39

标签: lua anchor string-matching

之前曾在Pattern in lua with anchors not matching询问过这个问题但是我有一个测试用例表明它仍然无法正常工作:

patterns = {
    'a@b',
    '^a@b',
    'a@b.com',
    'my-a@b',
    'my-a@b.com',
    'a@b.com$',
    '^this-is-my-a@b.com',
    'this-is-my-a@b.com$',
    '^this-is-my-a@b.com$',
}

test = "this-is-my-a@b.com"

for _, pattern in ipairs(patterns) do
    print(pattern .. ": " .. test .. "\n\tfind: " .. (test:find(pattern) or 'nil') .. "\n\tmatch: " .. (test:match(pattern) or 'nil'))
    print(pattern .. ": " .. test .. "\n\tfind: " .. (string.find(test, pattern) or 'nil') .. "\n\tmatch: " .. (string.match(test, pattern) or 'nil'))
end

我做了单独的test:find vs string.find(test...)只是为了确保没有恶作剧。

有人可以告诉我如何让我的锚定模式起作用吗?

1 个答案:

答案 0 :(得分:3)

您正在使用的某些字符(如.-)在模式匹配中具有特殊含义,您需要将它们转义。例如,使用^this%-is%-my%-a@b%.comthis%-is%-my%-a@b%.com$会产生预期结果。