2016-01-10 6 views
2

Так вот тривиальный пример, скажем, у меня есть уравнение какСтроковый шаблон, совпадающий с первой, самой внешней парой скобок?

local equation = "((5*2)+3)-(3^5)" 

И я хочу, чтобы захватить "((5*2)+3)"

Сначала я попытался

equation:match("%((.*)%)") 

Но * жаден, так что захваченный все уравнение.

Затем я попытался

equation:match("%((.-)%)") 

Но - ленив, и он захватил "((5*2)"

Очевидно, что я буду об этом неправильно. Как захватить скобки с помощью шаблона строки?

+0

Я хотел бы избежать вручную синтаксического анализа, если это вообще возможно – warspyking

+1

'уравнение: сопоставляют% б() '' –

ответ

5

Что вы ищете, это %b шаблон, который соответствует сбалансированным строкам. В этом примере, вы можете использовать %b(), чтобы соответствовать строке, которая начинается с (, и заканчивается с соответствующими ):

equation:match("%b()") 
+0

Удивительно! Благодаря! – warspyking

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

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