Изменения

Перейти к: навигация, поиск

Регулярные выражения с обратными ссылками

149 байт добавлено, 16:00, 4 июня 2018
Нет описания правки
{{Определение
|id=groupdef
|definition='''Группа''' (англ. ''capture group'') {{---}} часть [[Регулярные языки: два определения и их эквивалентность|регулярного выражения]]. Группа заключается в Общепринятое условное обозначение группы {{---}} круглые скобки.
}}
 
Пример: <tex>aba(ca)ba.\,</tex> В данном регулярном выражении представлена одна группа {{---}} <tex>(ca).</tex>
Каждой группе соответствует порядковый номер. Нумерация идёт слева направо: номеру группы соответствует порядковый номер открывающей круглой скобки этой группы в тексте регулярного выражения.
Для повторного использования '''слова''' группы используется обозначение <tex>\backslash n,\,</tex> где <tex>n</tex> {{---}} номер группы.
Пример использования: <tex>(a(1\,|\,0)^*)\backslash 1.\,</tex> Данное регулярное выражение будет допускать только словазадавать язык тандемных повторов. Несмотря на то, в которых количество букв <tex>a</tex> чётночто он не является [[Регулярные языки: два определения и их эквивалентность|регулярным]], его можно представить с помощью механизма обратных ссылок.
Для повторного использования '''регулярного выражения''' группы используется обозначение <tex>(?n),\,</tex> где <tex>n</tex> {{---}} номер группы. Использование круглых скобок обусловленно тем, что <tex>?,</tex> как управляющий символ , уже используется.
==Примеры==
# Регулярное выражение <tex>(aba?)c(?1)\,</tex> породит язык <tex>L=\{abcab,abacab,abcaba,abacaba\}.</tex>
# Выразим язык тандемных повторов над алфавитом <tex>(a^*)\Sigma=\{0,backslash 1.\},</tex> используя механизм обратных ссылок:#: Данное регулярное выражение будет допускать только слова, в которых количество букв <tex>L=((0\,|\,1)^∗)\backslash 1.a</tex>#: Данный язык не является [[Регулярные языки: два определения и их эквивалентность|регулярным]], однако его можно представить с помощью регулярных выражений с использованием обратных ссылокчётно.
# Выведем регулярное выражение для языка, состоящего из палиндромов фиксированной длины <tex>n=2\cdot m\,</tex> или <tex>\,n=2\cdot m+1</tex>:
#* для чётного <tex>n</tex>: <tex>\;(a_1)(a_2)(a_3)\dotsc(a_m)\backslash m\dotsc\backslash 3\backslash 2\backslash 1;</tex>
}}
Регулярные выражения с обратными ссылками имеют бо́льшую мощность по сравнению с обычными. С их помощью реализуются как регулярные языки, так и контекстно-свободные грамматики, а также некоторые контекстно-зависимые (см. пример 4например, язык тандемных повторов).
===Примеры преобразования===
32
правки

Навигация