2015-11-26 3 views
-1

Я пытаюсь извлечь некоторую информацию из файла, который имеет следующее содержание:Perl Regexp Извлечение строки из вложенных скобок

field { 
    a:"bb" 
    c:"dd" 
    field_param { 
     x:"xx" 
     y:"yy" 
    } 
    other_param { 
     z:"ee" 
    } 
    abc_param { 
     x: { abc: "value"; cfg:"value"} 
     ze: "value" 
    } 
} 

field { 
    a:"bb" 
    c:"dd" 
    field_param { 
     x:"xx" 
     y:"yy" 
    } 
    others_param { 
     z:"ee" 
    } 
} 

Есть более fields, как и выше, в текстовом файле. Не все fields имеют одинаковый формат, некоторые имеют разные параметры.

Я пытаюсь извлечь для каждого field, чтобы рассматривать его как объект с переменными и значениями. Проблема заключается в вложенном {} . Я не знаю, как извлечь значения между {} после разделения всего файла на fields. Я принимаю, чем fieldfield, но он не работает, чтобы извлечь вещи, которые находятся между скобками, если я хочу сделать это рекурсивно.

До сих пор я сделал что-то вроде:

open(FILE,"myfile.txt") 
    while(<FILE>) 
    { 
    $text .=$_; 
    } 
    close(FILE) 
    my @fields= split /fields/,$text; 
    for my $field(@fields) 
    { 
    my($extracted,$remainder)=extracted_bracketed($field,'{}'); 
    } 

Но это извлекает только то, что находится в поле. Я хочу сделать это как-то рекурсивным.

У кого-нибудь есть идеи?

+2

У вас возникла проблема с вашим парсером? Какая проблема? Где ваш код? – ikegami

+3

Я бы предложил _not_ использовать что-то похожее на JSON, но это не так. Это противно. В противном случае я бы посоветовал вам подробно остановиться на проблеме, с которой вы сталкиваетесь. Поскольку у вас рекурсивная структура данных, вам может понадобиться рекурсивный синтаксический анализатор. – Sobrique

ответ

2

Вам нужно написать синтаксический анализатор, и похоже, что вы ничего не знаете о разборе. Этот язык не все отличается от JSON, поэтому я рекомендую вам скопировать JSON :: PP и адаптировать его к вашему языку.

В качестве альтернативы используйте конструктор синтаксического анализатора, такой как Marpa.

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