2016-07-26 110 views
1

我试图在Lua中查找包含特殊字符的字符串的精确匹配。我想下面的例子返回,这是完全匹配,但由于-字符返回nilLua - 包含非字母类的匹配字符串

index = string.find("test-string", "test-string") 返回nil

index = string.find("test-string", "test-") 返回1

index = string.find("test-string", "test") 也返回1

我怎样才能做到完全匹配?

回答

2

您还可以要求忽略魔法字符的纯字符串匹配:

string.find("test-string", "test-string",1,true) 
+0

在我的情况下,这是最好的答案。这是因为第二个“测试字符串”实际上是用户输入的,所以我需要检查完全匹配。 – wprins

2

您需要转义%字符的模式中的特殊字符。

所以在这种情况下,你正在寻找

local index = string.find('test-string', 'test%-string') 
+0

大,所以后续的问题 - 其中'测试%-string'会实际上是将输入从用户。所以现在我必须搜索特殊字符,例如'-'或'.',并且放置每个字符的%infront。你知道我会怎么做吗? – wprins

+0

是的,[这个问题](http://stackoverflow.com/questions/9790688/escaping-strings-for-gsub)有一个如何转义输入字符串的很好的例子。 –

+0

谢谢我将为您选择最终答案! – wprins

3

-是一个Lua字符串模式的模式操作,所以当你说test-string,你告诉find()test的几次为匹配字符串可能。那么会发生什么呢看起来是test-string,看到test那里,并且因为-在这种情况下不是实际的减号,所以它真的在寻找teststring

照迈克的话说,并用%这个角色逃跑。我发现有助于更好地理解模式。

+0

这很有帮助,你有什么建议可以在字符串中找到这些特殊字符,并用它们自己和'%'替换它们?也许使用'string.gsub'? – wprins

相关问题