如何检查Lua中的字符串中是否找到匹配的文本?

Vil*_*age 40 string lua conditional string-matching

如果在一串文本中至少找到一次特定的匹配文本,我需要创建一个条件,例如:

str = "This is some text containing the word tiger."
if string.match(str, "tiger") then
    print ("The word tiger was found.")
else
    print ("The word tiger was not found.")
Run Code Online (Sandbox Code Playgroud)

如何检查文本是否在字符串中的某处找到?

hjp*_*r92 71

您可以使用两种string.matchstring.find.我亲自使用string.find()自己.此外,您需要指定end您的if-else陈述.所以,实际的代码将是:

str = "This is some text containing the word tiger."
if string.match(str, "tiger") then
  print ("The word tiger was found.")
else
  print ("The word tiger was not found.")
end
Run Code Online (Sandbox Code Playgroud)

要么

str = "This is some text containing the word tiger."
if string.find(str, "tiger") then
  print ("The word tiger was found.")
else
  print ("The word tiger was not found.")
end
Run Code Online (Sandbox Code Playgroud)

应该注意的是,当尝试匹配特殊字符(例如.()[]+-等)时,应该使用%字符在模式中对它们进行转义.因此,为了匹配,例如.tiger(,电话会是:

str:find "tiger%("
Run Code Online (Sandbox Code Playgroud)

可以在Lua-Users wikiSO的文档部分检查有关模式的更多信息.

  • 这适用于简单的示例"老虎",但有许多可能的搜索字符串将被解释为模式而不是文字字符串并破坏代码.请考虑更新上面的示例以支持搜索字符串"tiger(". (4认同)
  • 或者,使用语法sugar`str:find("tiger")` (3认同)
  • 转义模式匹配字符仍然不处理任意搜索字符串的情况 - 一个真正任意的(不是硬编码的),可能包含也可能不包含您无法转义的特殊字符.理想情况下,答案应该引用读者可选的第四个参数,它可以禁用模式搜索.例如string.find(myArbitraryString,myArbitrarySearchString,1,true),它适用于在运行时可能遇到的myArbitrarySearchString的任何值,包括值"tiger(". (2认同)
  • @NathanWiebe `string.find()` 有第四个参数 `plain`,当设置为 true 时,使第二个参数被视为普通字符串。虽然 `('aa+bb'):find('a+b')` 返回 `nil` (不匹配),但 `('aa+bb'):find('a+b', 1, true)`返回“2, 4”(找到匹配项)。 (2认同)