Как проверить, появляется ли слово как целое слово в строке в Lua

Не знаете, как проверить, появляется ли слово как целое слово в строке, а не как часть слова, с учетом регистра. например:

Play в строках

Info Playlist Play pause

но не в строках

Info Playlist pause
Info NowPlay pause

2 ответа

Решение

Так как нет обычного \b Граница слова в Lua, вы можете использовать шаблон границы %f, %f[%a] соответствует переходу к букве и %f[%A] соответствует противоположному переходу.

%f[set]пограничный рисунок; такой элемент соответствует пустой строке в любой позиции, так что следующий символ принадлежит множеству, а предыдущий символ не принадлежит множеству. Набор набор интерпретируется как описано выше. Начало и конец предмета обрабатываются так, как если бы они были персонажем \0,

Вы можете использовать следующее ContainsWholeWord функция:

function ContainsWholeWord(input, word)
    return string.find(input, "%f[%a]" .. word .. "%f[%A]")
end

print(ContainsWholeWord("Info Playlist pause","Play") ~= nil)
print(ContainsWholeWord("Info Play List pause","Play") ~= nil)

Посмотреть демо IDEONE

Чтобы полностью подражать \b поведение, вы можете использовать

"%f[%w_]" .. word .. "%f[^%w_]"

шаблон, как \b соответствует позициям между:

  • Перед первым символом в строке, если первый символ является словом ([a-zA-Z0-9_]) персонаж.
  • После последнего символа в строке, если последний символ является словом ([a-zA-Z0-9_]) персонаж.
  • Между двумя символами в строке, где один является символом слова ([a-zA-Z0-9_]) а другой не является символом слова ([^a-zA-Z0-9_]).

Обратите внимание, что %w Шаблон Lua не совпадает с \w поскольку он соответствует только буквам и цифрам, но не подчеркиванию.

function isWordFoundInString(w,s)
  return select(2,s:gsub('^' .. w .. '%W+','')) +
         select(2,s:gsub('%W+' .. w .. '$','')) +
         select(2,s:gsub('^' .. w .. '$','')) +
         select(2,s:gsub('%W+' .. w .. '%W+','')) > 0
end

print(isWordFoundInString('Play','Info Playlist Play pause'))
print(isWordFoundInString('Play','Info Playlist pause'))
print(isWordFoundInString('Play','Info NowPlay pause'))
Другие вопросы по тегам