Именованные группы и обратные ссылки

Именованные группы используют для хранения извлеченных данных и дальнейшей работы с ними.

Синтаксис

{запрос}:имя

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

Обратите внимание, что пробелы между правой скобкой, двоеточием и именем не допускаются.

Когда правило успешно извлекает некоторый текст, последовательность, соответствующая query, сохраняется в именованной группе «имя». В дальнейшем к содержанию группы можно обратиться с помощью обратной ссылки.

Синтаксис

$имя

Именованная группа может хранить совпадения всего запроса или любого корректного поискового подзапроса.

Пример

{a}:1 – корректно;

{a}:1 or b – корректно;

{a or b}:3 – корректно, «a or b» – корректный PDL-запрос;

{phrase(a, b)}:1 – корректно, «phrase(a, b)» – корректный PDL-запрос;

phrase({a}:1,{b}:2) – корректно, и «a», и «b» – корректные PDL-запросы;

{phrase(a,b) and phrase(c,d)}:2 – корректно, «phrase(a,b) and phrase(c,d)» корректный PDL-запрос;

phrase({a, b}:2, c) – ошибка, «a, b» – некорректный PDL-запрос;

a {or b}:3 – ошибка, «or b» – некорректный PDL-запрос.

Именованные группы могут быть вложены друг в друга в произвольном порядке.

Примеры

{follow({a}:1, b)}:2

{follow({{a}:1 or c}:2, b)}:3

Имя группы должно быть уникальным в пределах родительского правила. Однако в правилах одного уровня могут быть группы с одинаковым именем, как показано на Изображении 1.

xpdl rules hierarchy group synt rus
Изображение 1. Имя группы должно быть уникальным в пределах родительского правила

Содержимое именованной группы неизменно. Это означает, что вложенные правила могут ссылаться на именованные группы, но не изменять их значения, которые были объявлены в родительских правилах (за исключением случаев, описанных в разделе «Типы правил»). Если правило устанавливает дополнительные ограничения для значений, хранящихся в именованной группе, необходимо объявить новую именованную группу.

Рассмотрим набор правил на Изображении 2, извлекающих числа, за которыми следует знак процента.

xpdl rules hierarchy num rule rus
Изображение 2. Пример правила, извлекающего проценты

Правило верхнего уровня собирает все числа в именованную группу «num». После выполнения вложенного правила подмножество этих чисел, если за ними следует знак процента, собирается в именованную группу «num_pct» (Изображение 3)

xpdl rules hierarchy num output rus
Изображение 3. Результат работы правила на Изображении 2

Группа «num» по-прежнему собирает все числа, а не только те, за которыми следует знак «%». Чтобы проверить это, можно изменить результат, как показано на Изображении 4, и вывести в результат группу «num» вместо группы «num_pct».

xpdl rules hierarchy num rule1 rus
Изображение 4. Правило, извлекающее все числа

Результат работы измененного правила показан на Изображении 5.

xpdl rules hierarchy num output1 rus
Изображение 5. Результат работы правила на Изображении 4