Как записать строку в скобках?
str = "fa, (captured)[asd] asf, 31"
for word in str:gmatch("\(%a+\)") do
print(word)
end
Привет! Я хочу записать слово в скобках.
Мой код должен напечатать "захваченную" строку.
lua: /home/casey/Desktop/test.lua:3: invalid escape sequence near '\('
И я получил эту синтаксическую ошибку.
Конечно, я могу просто найти положение скобок и использовать функцию string.sub
Но я предпочитаю простой код.
Кроме того, скобки дали мне аналогичную ошибку.
2 ответа
Экранирующий персонаж в шаблонах Lua %
не \
, Так что используйте это:
word=str:match("%((%a+)%)")
Если вам нужен только один матч, нет необходимости gmatch
петля.
Чтобы захватить строку в квадратных скобках, используйте аналогичный шаблон:
word=str:match("%[(%a+)%]")
Если захваченная строка не полностью состоит из букв, используйте .-
вместо %a+
,
Ответ lhf, вероятно, даст вам то, что вам нужно, но я хотел бы упомянуть еще один вариант, который, по моему мнению, недостаточно используется и может работать для вас. Одна проблема с использованием %((%a+)%)
в том, что он не работает для вложенных скобок: если вы примените его к чему-то вроде "(text (more) text)", вы получите "more", даже если вы ожидаете "text (more) text"). Обратите внимание, что вы не можете это исправить, попросив найти первую закрывающую скобку (%(([^%)]+)%)
), поскольку это даст вам "текст (больше").
Тем не менее, вы можете использовать %bxy
элемент шаблона, который балансирует x
а также y
случаи и вернется (text(more)text)
в этом случае (вам нужно использовать что-то вроде (%b())
чтобы захватить это). Опять же, это может быть излишним для вашего случая, но полезно иметь в виду и может помочь кому-то еще, кто сталкивается с этой проблемой.