Как записать строку в скобках?

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()) чтобы захватить это). Опять же, это может быть излишним для вашего случая, но полезно иметь в виду и может помочь кому-то еще, кто сталкивается с этой проблемой.

Другие вопросы по тегам