我的正则表达式无法在Lua中工作。我已经在其他环境中测试了它,比如我的文本编辑器和一些在线正则表达式工具,它似乎在那里工作得很好。
正则表达式在我的其他环境中的运行方式:
RAY\.decrypt\s*\(([\"\'].+?(?=[\"\']).+?(?=[\)]))\s*\)
正在尝试在Lua中使用的正则表达式(仅用%&替换为
)RAY%.decrypt%s*%(([\"\'].+?(?=[\"\']).+?(?=[%)]))%s*%)
我试图匹配的示例文本(我想捕获括号中的内容)
RAY.decrypt ("\x02\x02\x02\x02\x02\x02\x02\x02")
RAY.decrypt ("\xd6E\xd6E\xd6E\xd6E\xd6E")
RAY.decrypt("\x8e\x8e\x8e\x8e\x8e\x8e\x8e\x8e")
其他工具与文本匹配,并完美捕捉我想要捕获的内容。但是我努力让Lua做到这一点,因为它不匹配任何东西。
local s = [[RAY.decrypt ("\x02\x02\x02\x02\x02\x02\x02\x02")
RAY.decrypt ("\xd6E\xd6E\xd6E\xd6E\xd6E")
RAY.decrypt("\x8e\x8e\x8e\x8e\x8e\x8e\x8e\x8e")]]
print(string.find(s, "RAY%.decrypt%s*%(([\"\'].+?(?=[\"\']).+?(?=[%)]))%s*%)"))
> nil
任何帮助将不胜感激,谢谢!
答案 0 :(得分:1)
local s = [[
RAY.decrypt ("\x02\x02\x02\x02\x02\x02\x02\x02")
RAY.decrypt ('\xd6E\xd6E\xd6E\xd6E\xd6E')
RAY.decrypt( "\x8e\x8e\x8e\x8e\x8e\x8e\x8e\x8e" )
]]
for w in s:gmatch"RAY%.decrypt%s*%(%s*(([\"']).-%2)%s*%)" do
print(w)
end
输出:
"\x02\x02\x02\x02\x02\x02\x02\x02"
'\xd6E\xd6E\xd6E\xd6E\xd6E'
"\x8e\x8e\x8e\x8e\x8e\x8e\x8e\x8e"
答案 1 :(得分:0)
我根本不认识LUA,但维基百科说LUA正则表达式引擎: "使用简化的,有限的方言;可以绑定到更强大的库,如PCRE或替代解析器,如LPeg。"
所以你应该将它绑定到PCRE,或者你不应该与其他引擎进行比较,只需使用LUA文档专门为LUA编写正则表达式,而不是文本编辑器。
答案 2 :(得分:0)
Lua的标准字符串库不支持完整的正则表达式,但它的模式匹配非常强大。
此脚本匹配括号内的所有内容:
for w in s:gmatch("%((.-)%)") do
print(w)
end
答案 3 :(得分:0)
Lua内置"正则表达式"被称为"模式"
这匹配括号中的内容
local source = [[
RAY.decrypt ("\x02\x02\x02\x02\x02\x02\x02\x02")
RAY.decrypt ("\xd6E\xd6E\xd6E\xd6E\xd6E")
RAY.decrypt("\x8e\x8e\x8e\x8e\x8e\x8e\x8e\x8e")
]]
-- this captures expressions containing RAY.decrypt ( " ... " )
for content in string.gmatch(source , "RAY%.decrypt%s*%(%s*\"(.-)\"%s*%)") do
print(content)
end
-- this captures expressions inside double quotes
for content in string.gmatch(source , "\"(.-)\"") do
print(content)
end
-- this captures expressions inside single or double quotes e.g. RAY.decrypt ( '\x8e\x8e\x8e\x8e\x8e\x8e\x8e\x8e')
for content in string.gmatch(source , "[\"'](.-)[\"']") do
print(content)
end
-- this captures expressions inside parentheses (will capture the quotes)
for content in string.gmatch(source , "%((.-)%)") do
print(content)
end