Lua中Python endswith()方法的等价实现及Python转Lua(nmap脚本)代码问题
Lua中实现Python的
endswith()等价功能 嘿,刚好能帮你解决这个问题!Lua的标准字符串库并没有内置endswith()方法,但我们可以用两种简单的方式实现等价功能,完美适配你的nmap脚本需求。
方式一:针对单个后缀字符的极简写法
因为你只是判断字符串是否以单个字符'9'结尾,直接取最后一个字符比较是最直接高效的:
for var = 1000, 9999 do -- 注意这里要把9000改成9999,和你的Python代码遍历范围一致哦 local str = tostring(var) if string.sub(str, -1) == '9' then print(var) end end
这里string.sub(str, -1)会取字符串str的最后一个字符,直接和'9'对比就完成了判断。
方式二:通用的endswith函数实现
如果以后需要判断更长的后缀(比如'99'、'xyz'),可以给Lua的string表扩展一个通用的endswith函数,用法和Python的完全一致:
-- 先定义通用的endswith函数 function string.endswith(str, suffix) -- 处理空后缀的情况(和Python行为一致,空字符串匹配任何字符串) return suffix == '' or string.sub(str, -#suffix) == suffix end -- 然后就可以像你最初写的那样调用了 for var = 1000, 9999 do if string.endswith(tostring(var), '9') then print(var) end end
这个函数的原理是:用-#suffix获取后缀长度对应的倒数起始位置,截取字符串的最后#suffix个字符,再和目标后缀对比,完全还原Pythonendswith()的逻辑。
内容的提问来源于stack exchange,提问作者user19270126
相关产品推荐
相关产品推荐

