string.find выдает неправильное значение

local num = string.find("i want this to work --", "--")
return num

Вот этот код по идее должен вернуть 21, но возвращает 1

Что делаю не так?


Ответы (1 шт):

Автор решения: Wiktor Stribiżew

Символ - является "специальным" в шаблонах Lua и является "нежадным" квантификатором, аналогичным *? в регулярных выражениях.

Его надо экранировать с помощью символа %:

string.find("i want this to work --", "%-%-")

См. пример работы кода онлайн.

Другие специальные символы в шаблонах Lua (на англ.):

  • ( - начало захватывающей подмаски
  • ) - конец захватывающей подмаски
  • . - любой символ
  • % - экранирующий символ
  • + - жадный квантификатор, находящий модифицируемый шаблон 1 и более раз
  • - - нежадный квантификатор, находящий модифицируемый шаблон 0 и более раз
  • * - жадный квантификатор, находящий модифицируемый шаблон 0 и более раз
  • ? - жадный квантификатор, находящий модифицируемый шаблон 1 или 0 раз
  • [ - начало символьного класса
  • ^ - начало строки
  • $ - конец строки
→ Ссылка