string.find 因连字符而失败

标签 string lua

我开始making Factorio mods与Lua,出现了一个有趣的问题:我无法在Lua中正确执行简单的子字符串搜索。 string.find 可以正确找到“-mining-”或“-drones”,但不能正确找到两个带有连字符的单词。如何解决这个问题?

local str = "copper-ore-mining-drone-10"
local sub = "mining-drone"
print(str:find(sub))

为了快速测试: https://www.lua.org/cgi-bin/demo

也许find使用了一些模式语法并且连字符没有按字面意思使用?但我什么也没找到in the docs ,并试图转义它 -”导致无效的转义序列错误。如果它需要一些转义,我如何自动执行此操作?因为我从外部源接收子字符串值。

最佳答案

经过更多谷歌搜索后,我发现是的,find方法确实使用了一些表达式语法(奇怪的是它在文档中没有解释)。有几个解决方案:

1。使用转义符号 %

好像lua的搜索表达式语法使用%作为转义字符:

str:find("mining%-drone")

2。设置plain标志

该方法有一些在文档中也没有提及的参数,第三个是 plain 标志,它允许按字面意思处理子字符串:

str:find(sub, 1, true)

关于string.find 因连字符而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76338986/

相关文章:

c++ - 通过 Swig 在 C++ 和 Lua 之间传递变量

lua - <eof> 预计在 'end' 附近

string - ASCII 字符串到 MATLAB 中的二进制向量?

.NET 内部编码

python - 如何在 Python 中将 str.format() 与字典一起使用?

arrays - lua: testscript.lua:37: '}' 预计在 '=' 附近

lua - Lua日期格式和比较

java - Android中的一个字符串存在于多个Activity中?

java - 为唯一的字符串种子生成唯一的 Long

c# - 使用 C# 的 lua 脚本中的西里尔字符串值