регулярное выражение для unlang файла - PullRequest
1 голос
/ 21 апреля 2020

У меня есть файл .conf на языке unlang , который похож на сочетание JSON и YAML, например:

client localhost {
    ipaddr = 127.0.0.1
    protocol = *
    limit {
        max_conns = 16
        timeout = 30
    }
}
client example.org {
    ipaddr = radius.example.org
    limit {
        lifetime = 0
    }
}

Я хочу разделить его на:

  • "клиент"
  • домен / IP
  • содержимое
  • "}"

В настоящее время у меня почти полностью работает регулярное выражение, за исключением содержимого, в котором отсутствует фигурная скобка, которая входит в группу 4º регулярного выражения (см. Здесь https://regex101.com/r/uiRAX6/3):

(.*?)\s(.*?)\s?{(.|\n[^}]*)(^[\s}]*)

Чего не хватает, чтобы взять только} без пробелов в начале строки в группе 4º (и оставить предыдущий материал в группе 3º)?

1 Ответ

1 голос
/ 21 апреля 2020

Я отредактировал регулярное выражение, которое вы вставили в вопрос. Попробуйте это. https://regex101.com/r/V7GMv2/2

Надеюсь, это то, что вы ожидаете.


Поэтому я сохранил лог c для первой и второй группы одинаковыми. Что касается go о двух других, я подумал, что, поскольку фигурная закрывающая скобка не будет иметь пробела перед ним, я захватил его с помощью ^}, то есть он будет присутствовать в качестве первого символа в строке.

Затем для третьей группы я применил ленивый подход, чтобы сопоставить все, что может быть между первой открывающейся фигурной скобкой и четвертой группой.

Опять же, предполагается, что в целом перед закрывающей скобкой нет пробела.

Кроме того, если вы не знаете, вы можете дать каждой группе уникальное имя, добавив имя группы в регулярное выражение, (?P<client>.+?)\s(?P<domain>.+?)\s{(?P<content>[\w\W\s]+?)(?P<close>^})

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...