使用通配符的String.find()函数

我有一些字符串使用通配符“-”代替空格,而我在lua中进行字符串操作时遇到了困难

这是我的代码:

string_A = "this-is-a-word"

string_array =
{
    line_A = "this-is-a-word-but-bigger"
    line_B = "this-is-a-bigger-word"
}

for _, string_line in pairs(string_array) do
    if string.find(string_line, string_A) then
    ...
end

每个参数都应该像单个单词一样处理,这意味着唯一匹配的就是string_A/line_A,因为它们包含相同的块

原文链接 https://stackoverflow.com/questions/71152665

点赞
stackoverflow用户2858170
stackoverflow用户2858170

- 是字符串模式中的魔法字符之一,包括 ^$()%.[]*+-?)。将它们放在要搜索的字符串中会导致问题。

您有两个选择。

A

使用 string.find 可选的第四个参数搜索纯字符串。这将不会将任何字符视为魔法字符。

string.find(string_lineA, stringA, 1, true)

或者简写为

string_lineA:find(stringA, 1, true)

B

使用 % 转义任何魔法字符。

string.find(string_line, "this%-is%-a%-word")

从手册中可以看到:

%x:(其中x是任何非字母数字字符)代表字符x。这是转义魔法字符的标准方式。可以在任何非字母数字字符(包括所有标点符号字符,甚至是非魔法字符)前面加上 % 来在模式中表示它本身。

如果我们可以对任何非字母数字字符执行此操作,则可以通过在任何非字母数字字符前加上 % 来转义任何魔法字符。%w 匹配字母数字字符。大写字母否定字符类,因此 %W 是非字母数字字符。它导致

string.gsub(yourPattern, "%W", "%%%0")

或者简写为

yourPattern:gsub("%W, "%%%0")

其中 %% 是转义后的 %%0 是匹配的字符串。

2022-02-17 06:49:11