LUA 模式匹配未按预期工作
LUA pattern matching not working as intended
我正在编写一个 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|")
任何人都可以帮助我知道这可能是什么原因吗?
你的第一个问题是因为字符串中的序列 \.
正在转义字符。
在 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
下一个。模式中的最后一个管道字符允许匹配到空字符串。
所以几乎每个字符串都匹配这个模式。
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
我正在编写一个 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|")
任何人都可以帮助我知道这可能是什么原因吗?
你的第一个问题是因为字符串中的序列 \.
正在转义字符。
在 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
下一个。模式中的最后一个管道字符允许匹配到空字符串。
所以几乎每个字符串都匹配这个模式。
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