Чтение текстового конфигурационного файла: использование регулярного выражения для анализа - PullRequest
0 голосов
/ 08 июля 2011

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

Таким образом, файл конфигурации заполнен блоками кода следующим образом:

blockName BLOCK
     IDENTIFIER value
     IDENTIFIER value
     IDENTIFIER
          "string literal value that
          could span multiple lines"

Количество идентификаторов может быть от 1..infinity. ИДЕНТИФИКАТОРОМ может быть ИМЯ, ОПИСАНИЕ, ТИП или тому подобное.

Я никогда раньше не работал с многострочными регулярными выражениями. Я не очень знаком с процессом. По сути, я хочу использовать функцию findAll, используя это регулярное выражение, чтобы поместить все проанализированные данные блока в структуру данных для обработки.

РЕДАКТИРОВАТЬ: уточнение: Я только хочу прочитать этот файл один раз. Меня не волнует эффективность или элегантность. Я хочу прочитать информацию в структуру данных, а затем выплюнуть ее в другом формате. Это большой файл (3000 строк), и я не хочу делать это вручную.

Ответы [ 2 ]

1 голос
/ 08 июля 2011

Я не думаю, что регулярное выражение - лучший инструмент для этого.

0 голосов
/ 09 июля 2011

Попробуйте, это должно работать в регулярных выражениях perl:

([\w\d]*)\s+BLOCK\s*\n(\s*(NAME|DESCRIPTION|TYPE|...)\s*([\w\d]*|"(.*)")\s*\n)+

Я подтвердил это на REGex TESTER , используя следующий тестовый текст:

blockName BLOCK
     NAME value
     NAME value
     DESCRIPTION
          "string literal value that
          could span multiple lines"
otherName BLOCK
     NAME value
     TYPE value
     DESCRIPTION
          "string literal value that
          could span multiple lines"

Последний блок / идентификатор будет найден только в том случае, если файл заканчивается новой строкой

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