2013-03-07 114 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

相关问题