2013-03-07 61 views
7

我只是新來lua ...所以我很抱歉如果我失去了一些基本的東西。
我正在運行一個簡單的測試,看看我能否在字符串中找到某些值。爲什麼lua string.find在這個測試用例中返回true?

下面的代碼:

print(string.find('[email protected]','.')) 

而不是失敗,這正是我所期待的,我找回:

mymachinename:/usr/share/std/test# lua test.lua 
1  1 

你能告訴我,我要去哪裏錯了嗎? 謝謝。

+1

重複? http://stackoverflow.com/questions/15258313/finding-with-string-find – 2013-03-07 20:46:11

回答

6

這是因爲在Lua中,find方法尋找模式. represents any character

您可以使用的字符集來解決此問題:

print(string.find('[email protected]','[.]')) 

這裏是一個link to a small demo

+2

使用'%'作爲轉義字符更容易,類似於在正則表達式中使用反斜槓:'print(string.find(' fd @ testca','%。'))' – 2013-03-07 16:22:11

+0

@KeithThompson很高興知道,謝謝!我只是Lua的一個隨便用戶,所以我的知識對細節非常有限。 – dasblinkenlight 2013-03-07 16:23:29

+0

@KeithThompson我個人認爲這是一個品味問題。當談到像括號這樣的符號轉義時,我發現'[(]'和'[]]'比'%('和'%)'更可讀 - 尤其是當它與實際的分組圓括號交錯時。使用一個字符類來逃避單個字符會創建一個很好的小方塊,這個方塊很容易在更長的模式中識別,而且它也不會是字符的「中心」(在'%('實際的信息在中心右邊) - 我認爲這確實有助於發現匹配的圓括號等。 – 2013-03-07 22:06:37

3

Lua使用模式(描述here)進行搜索。您可以使用可選的第四個參數關閉模式:

print(string.find('[email protected]','.', 1, true)) 

可選的第三個參數(1)是起始位置。

+0

不,Lua不使用正則表達式;它使用* patterns *,[在此處描述](http:// www。 lua.org/pil/20.2.html)(因爲實現使用的代碼少得多) – 2013-03-07 16:20:51

+0

@KeithThompson:對不起,我正在從lua-users wiki進行解釋:「使用可選的第四個參數關閉正則表達式功能'無論如何,第四個布爾參數允許純文本搜索 – Corey 2013-03-07 16:27:32

+0

我剛剛更正了wiki(和你的答案)。 – 2013-03-07 16:43:06

相關問題