我开始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/