В вашем фрагменте кода есть некоторая синтаксическая ошибка, которая вызывает указанную вами ошибку. Функция gsub действительно работает отлично.
text = "ib c e d f"
text = string.lower(text)
b = text:gsub("%s+", "_") --> this gsub is working just fine
for k=1, #b do
if not string.sub(b, k,k) or string.sub(b, k,k) ~= " " then
if a[i][2] == string.sub(b, k,k) then --> you didn't assign any table called "a" before --> attempting to index a nil value
print(yes)
end
--> haven't close the "if not string.sub" function with an end
end --> this is the end for the loop "for k"
Я просто дико предполагаю, что вы хотите сравнить строки результата с исходной строкой. Поскольку ваш вопрос настолько загадочен, я мог только предложить вам этот код ниже для справки:
text = "ab c d e f "
text = string.lower(text)
output = text:gsub("%s", "_")
for k = 1, #output do
local char = string.sub(output, k, k)
local originalChar = string.sub(text, k, k)
if (originalChar ~= " ") and (char == originalChar) then
print(char .. " --> OK")
end
end
Узор GSUB использует %s
вместо %s+
так, что каждое пространство превращается в подчеркивание, чтобы простой тест блока (голец с помощью сравнения символов). Доступен фрагмент кода here.
Что такое 'a [i] [2]'? – hjpotter92