2014-10-09 4 views
7
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 функцию

Но я предпочитаю простой код.

Кроме того, скобки дали мне аналогичную ошибку.

ответ

8

Эскизный персонаж в моделях Lua - %, а не \. Так что используйте это:

word=str:match("%((%a+)%)") 

Если вам нужен только один матч, нет никакой необходимости в gmatch цикла.

Чтобы захватить строку в квадратных скобках, используйте аналогичную картину:

word=str:match("%[(%a+)%]") 

Если захваченная строка не полностью состоят из букв, используйте .- вместо %a+.

4

Ответ lhf, вероятно, дает вам то, что вам нужно, но я хотел бы упомянуть еще один вариант, который, по моему мнению, недоиспользуется и может работать и на вас. Одна из проблем с использованием %((%a+)%) заключается в том, что она не работает для вложенных круглых скобок: если вы примените ее к чему-то вроде «(текст (больше) текста)», вы получите «больше», даже если вы может ожидать «текст (больше) текст». Обратите внимание, что вы не можете исправить это, попросив, чтобы соответствовать к первой закрывающей скобкой (%(([^%)]+)%)), поскольку это даст вам «текст (более».

Однако, вы можете использовать %bxy pattern item, который уравновешивает x и y вхождений и будет return (text(more)text) (в этом случае вам нужно будет использовать что-то вроде (%b())). Опять же, это может быть излишним для вашего дела, но полезно иметь в виду и может помочь кому-то другому, кто сталкивается с этой проблемой.

+1

+1, Это был мой оригинальный ответ. :) – lhf

+0

Благодарим вас за дополнительную информацию. и ваша Lua IDE потрясающая! –

 Смежные вопросы

  • Нет связанных вопросов^_^