2012-05-03 4 views
0

Я пишу приложение для разбора некоторых команд. Команды задаются в виде:Разбор строки с вложенными скобками

A {B}

Я просто хочу, А и Б. не является обязательным, но это достаточно легко справиться. Проблема, с которой я сталкиваюсь, состоит в том, что как A, так и B могут содержать почти любой символ, включая пробелы и '{' и '}'. Скобки также не должны быть сбалансированы. Можно ли анализировать регулярное выражение? Если нет, то что самое простое, что, по вашему мнению, можно сделать?

Например, если:

"parsme {Foo { "привет"} { "до свидания"} {{{} {бар { "до"} { "вниз"}}"

Тогда :

A = "parseme {Foo { "привет"} { "до свидания"} {{{}" и B = "бар { "вверх"} { "вниз"}"

+2

Пробелы и другие символы не представляют особой озабоченности, но если вы говорите, что скобки не должны быть сбалансированы, как бы вы знали, где начинается B? – jdi

+0

Я не могу понять, как кто-то должен отличать B от A! – Ashe

+0

Извините, я должен был сказать, что скобки в A не должны быть сбалансированы. –

ответ

4

Вы не можете используйте регулярное выражение для синтаксического анализа всего, что требует произвольной вложенности, такой как скобки (это хорошо установленное ограничение регулярных выражений, здесь вам поможет немного googling).

Для этого вам понадобится использовать контекстную грамматику с помощью инструмента, такого как Antlr.

+1

+1. Ну, вы [** можете ** использовать] (http://stackoverflow.com/a/4234491/1191425) (Perl) регулярные выражения для синтаксического анализа вложенных структур. Если вы хотите или нет, то до * you * ... –

+1

@ Li-aungYip: осторожно, это может напугать некоторых людей от программирования на всю жизнь! – Ashe

+1

@Len: В этом конкретном случае это был эффект, на который шел tchrist. ;) Не всякая проблема с обработкой строк допускает решение на основе регулярных выражений, и даже для тех, кто допускает решения regex, иногда вам все равно лучше что-то еще. –

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