Lua: вернуть содержимое "{foo} {bar}" - PullRequest
0 голосов
/ 05 октября 2018

для такой строки, как "{foo}{bar}", может ли

str = "{foo}{bar}"
first, second = str:gmatch(...)...

дать first="foo" и second="bar"

Проблема в том, что сама foo может иметь еще несколькокруглые скобки, например:

str = "{foo {baz}{bar}"

, так что first = "foo {baz" Часть bar содержит только буквенно-цифровые символы, без скобок

1 Ответ

0 голосов
/ 05 октября 2018

Вы можете использовать

first, second = str:match('{([^}]*)}%s*{([^}]*)}')

См. Демонстрационную версию Lua онлайн

Функция str.match найдет и вернет первое совпадение, и так как есть два захватагруппы, при правильном совпадении будут возвращены два значения.

Шаблон означает:

  • { - { char
  • ([^}]*) -Группа 1: любые 0+ символов, кроме }
  • } - } char
  • %s* - 0+ пробелов (не обязательно, но бонус)
  • {([^}]*)} - то же, что и выше, только здесь определена группа 2.
...