LUA模式匹配不按预期工作

时间:2017-09-21 06:08:23

标签: lua pattern-matching lua-patterns

我正在开发一个LUA脚本,用于阻止传入数据的任何部分中包含字符串“@ 7.7.7.7”的所有行。 为此,使用了以下正则表达式:

local reg = regex.new("555d%|@7\.7\.7\.7\\b\|abc.com")

虽然这会阻止@ 7.7.7.7,但它也会阻止@ 757.787.84.91 我研究了Lua编程语言,它表明%(而不是)是魔术角色的转义字符。 (点) 因此,在“555d%| @ 7.7.7.7 \ b |”模式中,\没有任何效果。被用来匹配任何角色。 但奇怪的是,当我用%替换\时,它不会阻塞包含“@ 7.7.7.7”的行。 新模式如下:

local reg = regex.new("555d%|@7%.7%.7%.7\\b|")

有人可以帮助我知道这可能是什么原因吗?

1 个答案:

答案 0 :(得分:1)

你的第一个问题是因为字符串中的序列\.正在转义char。 在Lua 5.1上只等于.但没有Lua> 5.1并且在LuaJIT上产生类似invalid escape sequence near '\.'的错误。 所以"555d%|@7\.7\.7\.7\\b|"等于"555d%|@7.7.7.7\\b|"。 这种模式(假设它是PCRE兼容的)与@757.787匹配 下一个。模式中的最后一个管道char允许匹配空字符串。 所以几乎每个字符串都符合这种模式。 此外,PCRE中的d%等于d%。 所以我认为你需要像

这样的模式
local reg = regex.new([[555d%|@7\.7\.7\.7\b]]")
-- or if you need pipe as last char in string
local reg = regex.new([[555d%|@7\.7\.7\.7\b\|]]")

表示匹配555d%@7.7.7.7

相关问题