2016-07-26 99 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

相關問題