RXParser 1.6001 - универсальный преобразователь текстовых документов

Правила разбора входного документа (rx)

Разбор входного документа происходит по правилам, которые объявляются в файлах правил разбора.
rx - рекомендуемое расширение для таких файлов.

Структура файла rx

Файл правил состоит из отдельных правил разбора входного документа:

<однострочный заголовок> <символ-ограничитель>
<многострочное тело правила>
<символ-ограничитель>

<Символ-ограничитель> - символ из набора [~!@#$%^&*()_+|`-=\<>?,./], [0-9a-zA-Zа-яА-Я]

Структура <однострочного заголовка>:

<человеческое описание> : <пространство имён> ( <список переменных> )

<Человеческое описание> - зарезервированная для будущих версий возможность наименования <пространств имён> на понятном языке. Может заключаться в двойные """ или одинарные "'" кавычки, в обратном случае, наименование не должно содержать символ двоеточия ":".

<Пространство имён> - это наименование пространства имён <переменных> из <списка переменных>. Может заключаться в двойные """ или одинарные "'" кавычки, в обратном случае, наименование не должно содержать символы круглых скобок "(", ")".
Рекомендуемый набор символов для наименования: [0-9a-zA-Z_] и символ "-".

Структура <списка переменных>:

<имя1> [ : <ТИП> ] , <имя2> [ : <ТИП> ] , ... , <имяN> [ : <ТИП> ]

<имя переменной> - наименование переменной из данного <пространства имён>. Имя переменной ассоциировано с массивом значений, определяемым по правилу из <тела правила>.
Имя переменной может заключаться в двойные """ или одинарные "'" кавычки, в обратном случае, наименование не должно содержать символ ":" и символ ",". Дополнительно может указываться <ТИП обработчика> содержания, ассоциированного с данной <переменной> из заданного <пространства имён>.

<ТИП обработчика> - наименование типа обработчика содержания, ассоциированного с данной <переменной> из заданного <пространства имён>. Имя типа может заключаться в двойные """ или одинарные "'" кавычки, в обратном случае, наименование не должно содержать символ ":" и символ ",". Указание наименования типа обработчика имеет смысл если с данным наименованием ассоциирован соответствующий обработчик.

Предопределённые типы обработчиков

Имя Описание
AS-IS - содержание остаётся "как есть" - без дополнительной обработки.
HTML - содержание форматируется как часть HTML-документа: символьные константы заменяются на соответствующие символы.
TEXT - содержание форматируется как простой текст: удаляются теги HTML, а символьные константы заменяются на соответствующие символы.
TEXT/ENTITY - содержание форматируется как простой текст: удаляются теги HTML.
DATE - если в содержании найдена строка формата "дд.*мм.*гг", то содержание форматируется с использованием шаблона "дд.мм.гггг". В обратном случае изменений не происходит.
LINK - зарезервирован для будущих версий модуля. Содержание не изменяется.

Описание <многострочного тела правила>.

Правило разбора - это регулярное выражение языка Perl 5.8.x.

Символы, указанные неявно (нажатием клавиши ENTER на клавиатуре) "\r" (возврат каретки) и "\n" (перевод на новую строку) заменяются на шаблон "\s*" - "любое количество любых пробельных символов".
Если символы "\r" и "\n" указать явным образом (путём написания специальных обозначений этих символов "\r", "\n"), то они не будут заменены их значение останется прежним.

Части, выделенные в правиле в незаэкранированных символом "\", круглых скобках "(" и ")", будут запоминаться в соответствующей <переменной> (по порядку) из <заголовка правила> в виде массива с использованием заданного <типа обработчика>.

Напрямую инструкции для Perl можно писать так:

(?{
# инструкции Perl
})

Пример написания правила rx

Задача. Вынуть из следующей части документа информацию о каждой следующей новости с помощью правил rx:

<img src="bulletlong.gif" width="4" height="16" border="0" alt="">&nbsp; <a class="ea" href="index-139.htm">Apple готовит дешевый "Макинтош" </a><br> <img src="bulletlong.gif" width="4" height="16" border="0" alt="">&nbsp; <a class="ea">Ковры-самолеты: "мышиные радости" класса hi-end </a><br> <img src="bulletlong.gif" width="4" height="16" border="0" alt="">&nbsp; <a class="ea">Зебра: субъективный миниобзор Siemens SL65 </a><br> <img src="bulletlong.gif" width="4" height="16" border="0" alt="">&nbsp; <a class="ea">Офисный удалец: системная плата Gigabyte GA-8I915G-MF </a><br>

Решение:

"Новость" : pulp-fiction ( ссылка : LINK , заголовок : TEXT ).
	<img src="bulletlong\.gif" width="4" height="16" border="0"[^>]*> 
	<a class="ea" href="([^"]+)">
		(.+?)
	</a>
	<br>
.

Заключение

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

Следующий этап преобразования документа - составление шаблона преобразования.


[ Главная страница ] [ Правила разбора ] [ Правила сборки ]


RXParser. Автор Шатров А. С. <cdch@yandex.ru>
Краснодар, 13.03.2005