【问题标题】:How to check if matching text is found in a string in Lua?如何检查是否在Lua的字符串中找到匹配的文本?
【发布时间】:2012-04-26 20:35:03
【问题描述】:

如果在文本字符串中至少找到一次特定的匹配文本,我需要设置一个条件为真,例如:

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.")

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

【问题讨论】:

    标签: string lua conditional string-matching


    【解决方案1】:

    有 2 个选项可以找到匹配的文本; string.matchstring.find

    这两个都对字符串执行正则表达式搜索以查找匹配项。


    string.find()

    string.find(subject string, pattern string, optional start position, optional plain flag)
    

    返回找到的子字符串的startIndexendIndex

    plain 标志允许模式被忽略并被解释为文字。它不是将(tiger) 解释为匹配tiger 的正则表达式捕获组,而是在字符串中查找(tiger)

    反之,如果你想要正则匹配但仍然想要文字特殊字符(例如.()[]+- 等),你可以用百分比转义它们; %(tiger%).

    您可能会将其与 string.sub 结合使用

    示例

    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
    

    string.match()

    string.match(s, pattern, optional index)
    

    返回找到的捕获组。

    示例

    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
    

    【讨论】:

    • 或者,使用语法糖str:find("tiger")
    • 这适用于简单的示例“tiger”,但有许多可能的搜索字符串将被解释为模式而不是文字字符串并破坏代码。请考虑更新上面的示例以支持搜索字符串“tiger(”。
    • @NathanWiebe 你是对的。由于这似乎是一个广受欢迎的答案,因此我添加了一个相同的部分。随意进一步扩展它:)
    • 转义模式匹配字符仍然不能处理任意搜索字符串的情况 - 一个真正任意的(非硬编码)并且可能包含也可能不包含您无法使用的特殊字符的逃避。理想情况下,答案应该让读者参考可选的第四个参数,它可以禁用模式搜索。例如string.find(myArbitraryString, myArbitrarySearchString, 1, true),它适用于运行时可能遇到的任何 myArbitrarySearchString 值,包括值“tiger(”。
    • @NathanWiebe string.find() 有第四个参数plain,当设置为 true 时,会将第二个参数视为纯字符串。 ('aa+bb'):find('a+b') 返回 nil(不匹配),('aa+bb'):find('a+b', 1, true) 返回 2, 4(找到匹配)。
    猜你喜欢
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    相关资源
    最近更新 更多