【问题标题】:why does lua string.find return true for this test case?为什么这个测试用例的 lua string.find 返回 true?
【发布时间】:2013-02-22 22:20:46
【问题描述】:

我只是 lua 的新手......所以如果我错过了一些基本的东西,我很抱歉。
我正在运行一个简单的测试,看看我是否可以在字符串中找到某些值。

代码如下:

print(string.find('fd@testca','.') )

我没有失败,这正是我所期待的,而是回来了:

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

你能告诉我哪里出错了吗? 谢谢。

【问题讨论】:

标签: string lua


【解决方案1】:

这是因为在 Lua 中,find 方法会寻找一个模式,而. represents any character。

您可以使用字符集来解决该问题:

print(string.find('fd@testca','[.]') )

这是link to a small demo。

【讨论】:

  • 使用%作为转义字符更容易,类似于在正则表达式中使用反斜杠:print(string.find('fd@testca','%.') )
  • @KeithThompson 很高兴知道,谢谢!我只是 Lua 的一个普通用户,所以我对细节的了解相当有限。
  • @KeithThompson 我个人认为这是一个品味问题。在转义括号等符号时,我发现[(] 和[)] 比%( 和%) 更易读——尤其是当它与实际的分组括号交错时。使用字符类来转义单个字符会创建一个漂亮的小方块,在较长的图案中很容易识别,而且它也不是字符的“中心”(在%( 中,实际信息位于我在看什么) - 我认为这确实有助于发现匹配的括号等。
【解决方案2】:

Lua 使用模式(描述为here)进行搜索。您可以使用可选的第四个参数关闭模式:

print(string.find('fd@testca','.', 1, true) )

可选的第三个参数(1)是起始位置。

【讨论】:

  • 不,Lua 不使用正则表达式;它使用 patterns,described here(因为实现使用的代码要少得多)。
  • @KeithThompson:对不起,我从 lua-users wiki 转述:“通过使用可选的第四个参数‘plain’关闭正则表达式功能。”无论如何,第四个布尔参数允许纯文本搜索。
猜你喜欢
  • 1970-01-01
  • 2018-01-28
  • 2019-07-02
  • 2012-10-22
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 2019-06-29
  • 1970-01-01
相关资源
最近更新 更多