В настоящее время я работаю над парсером для своей программы. Парсер разбирает код, похожий на JSON, но я хочу держаться подальше от использования парсера JSON. Крайне важно, чтобы я использовал свой собственный парсер, а не сторонний парсер. Он использует фигурные скобки для установки «наборов».Regex для получения текста между фигурными скобками
Это мой текущий код регулярного выражения на данный момент.
\\{(\\s*)+(.*?)(\\s*)+\\}
Пример ввода и вывода будет:
Вход: {value, value2}
Выход: value, value2
Теперь, это работает отлично, но когда я хочу поставить еще один набор в вход:
Вход: {value, {value2}}
Выход: value, {value2 }<-Outermost curly bracket
Наружная фигурная скобка остаются позади, поскольку закрывающая скобка из встроенного набора становится частью рисунка.
Я также хочу, чтобы иметь возможность поставить другие наборы на входе:
Вход: {value, value2} {value3, value4}
(Wanted) Выход: value, value2 value3, value4
Это делает с помощью $
в конце регулярного выражения практически бесполезный.
Это '{(\ s *) + (. *?) (\ S *) +}' - это плохой способ сделать это. Если флаг «точка-все» установлен, '\ s' является избыточным. Если флаг dot-all установлен _NOT_, этот '. *?' Будет разрешать только одну строку, прежде чем он ожидает опциональные пробелы, а затем '}'. Вид поражения цели, если вы только пытаетесь сопоставить 1 строку. – sln
Regex в Java не поддерживает рекурсию, поэтому вы не можете использовать ее для анализа вложенных структур. – Pshemo
Используйте собственные рекурсивные вызовы функций языка Java, поддерживайте собственный подсчет брекетов. Regex в Java не может быть и речи. Запросите обновление. – sln