Регулярные выражения с обратными ссылками — различия между версиями
Daviondk (обсуждение | вклад) (Правки) |
|||
Строка 1: | Строка 1: | ||
+ | {| class="wikitable" align="center" style="color: red; background-color: black; font-size: 56px; width: 800px;" | ||
+ | |+ | ||
+ | |-align="center" | ||
+ | |'''НЕТ ВОЙНЕ''' | ||
+ | |-style="font-size: 16px;" | ||
+ | | | ||
+ | 24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян. | ||
+ | |||
+ | Будучи гражданами Российской Федерации, мы против своей воли оказались ответственными за нарушение международного права, военное вторжение и массовую гибель людей. Чудовищность совершенного преступления не оставляет возможности промолчать или ограничиться пассивным несогласием. | ||
+ | |||
+ | Мы убеждены в абсолютной ценности человеческой жизни, в незыблемости прав и свобод личности. Режим Путина — угроза этим ценностям. Наша задача — обьединить все силы для сопротивления ей. | ||
+ | |||
+ | Эту войну начали не россияне, а обезумевший диктатор. И наш гражданский долг — сделать всё, чтобы её остановить. | ||
+ | |||
+ | ''Антивоенный комитет России'' | ||
+ | |-style="font-size: 16px;" | ||
+ | |Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению. | ||
+ | |-style="font-size: 16px;" | ||
+ | |[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки]. | ||
+ | |} | ||
+ | |||
==Базовые определения== | ==Базовые определения== | ||
{{Определение | {{Определение |
Версия 07:01, 1 сентября 2022
НЕТ ВОЙНЕ |
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян. Будучи гражданами Российской Федерации, мы против своей воли оказались ответственными за нарушение международного права, военное вторжение и массовую гибель людей. Чудовищность совершенного преступления не оставляет возможности промолчать или ограничиться пассивным несогласием. Мы убеждены в абсолютной ценности человеческой жизни, в незыблемости прав и свобод личности. Режим Путина — угроза этим ценностям. Наша задача — обьединить все силы для сопротивления ей. Эту войну начали не россияне, а обезумевший диктатор. И наш гражданский долг — сделать всё, чтобы её остановить. Антивоенный комитет России |
Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению. |
meduza.io, Популярная политика, Новая газета, zona.media, Майкл Наки. |
Содержание
Базовые определения
Определение: |
Группа (англ. capture group) — часть регулярного выражения. Общепринятое условное обозначение группы — круглые скобки. |
Пример: В данном регулярном выражении представлена одна группа —
Каждой группе соответствует порядковый номер. Нумерация идёт слева направо: номеру группы соответствует порядковый номер открывающей круглой скобки этой группы в тексте регулярного выражения (исключая случаи, когда скобки являются частью синтаксической конструкции).
Пример:
Группа — группа — группа —
Определение: |
Обратная ссылка (англ. backreference) — механизм повторного использования групп или слов группы. |
Для повторного использования слова группы используется обозначение где — номер группы.
Пример использования: регулярным, его можно представить с помощью механизма обратных ссылок.
Данное регулярное выражение будет задавать язык тандемных повторов. Несмотря на то, что он не являетсяДля повторного использования регулярного выражения группы используется обозначение
где — номер группы. Использование круглых скобок обусловленно тем, что как управляющий символ, уже используется. В данном случае круглые скобки следует воспринимать как общепринятое условное обозначение обратной ссылки; запись не задаёт группу. Например, в выражении ссылке будет соответствовать а не
Обратите внимание, что символы круглых скобок и обратной косой черты являются управляющими. Чтобы использовать их непосредственно как часть слова, их нужно экранировать.
Пример экранирования (в данном случае в качестве символа экранирования используется символ обратной косой черты):
— обратная ссылка на первую группу, — слово, состоящее из символа обратной косой черты и единицы.
Определение: |
Регулярные выражения с обратными ссылками (англ. regex with backreferences) — регулярные выражения, использующие механизм обратных ссылок. |
Примеры
- Регулярное выражение породит язык Для сравнения, запишем эквивалентное регулярное выражение без использования механизма обратных ссылок:
- Данное регулярное выражение будет допускать только слова, в которых количество букв чётно.
- Выведем регулярное выражение для языка, состоящего из палиндромов фиксированной длины
- для чётного :
- для нечётного :
или над алфавитом :
- Запишем выражение для языка лемме о разрастании), то есть является контекстно-зависимым, но также легко представим с помощью обратных ссылок:
- .
Данный язык не является ни регулярным, ни контекстно-свободным (по - Язык
- Следущий за ссылкой знак вопроса обозначает использование группы или раз, то есть осуществление рекурсивного вызова или его окончание.
-
- Очевидно, что все слова из языка удовлетворяют данному регулярному выражению.
можно представить при помощи обратных ссылок:
Теорема о КС-языках
Теорема: |
С помощью механизма обратных ссылок можно представить любой контекстно-свободный язык. |
Доказательство: |
Любую контекстно-свободную грамматику можно привести к нормальной форме Хомского, следовательно, достаточно доказать, что грамматику, заданную в такой форме, можно преобразовать в регулярное выражение с обратными ссылками. Рассмотрим правила, которые могут содержаться в такой грамматике:
Представим каждое из них в виде регулярного выражения с обратными ссылками. Используя ссылки на регулярные выражения, соответствующие нетерминалам и , можно представить первое правило:где и соответствуют нетерминалам и ; Второе и третье правила не требуют использования обратных ссылок:
Если какому-то нетерминалу соответствуют несколько регулярных выражений , заменить их на одно: (очевидно, что оно также будет соответствовать этому нетерминалу).Регулярное выражение для данной КС-грамматики соответствует нетерминалу левостороннего вывода. При обработке очередной ссылки: однако в нём могут встречаться ссылки на внешние — отличные от — группы. Будем обрабатывать такие ссылки, используя метод
|
Пример преобразования
Рассмотрим следующую КС-грамматику:
- Приведём её к нормальной форме Хомского:
- Каждому нетерминалу поставим в соответствие свой номер:
- Каждое правило представим в виде регулярного выражения с обратными ссылками:
- Объединим регулярные выражения, соответствующие одинаковым нетерминалам:
- Избавимся от внешних ссылок в регулярном выражении для :
№ | Текущее регулярное выражение |
---|---|
1. | |
2. | |
3. | |
4. | |
5. | |
6. | |
7. | |
8. | |
9. |
1 | |||||
1 | 3 | ||||
1 | 4 | 3 | |||
1 | 4 | 3 | 6 | ||
1 | 4 | 3 | 6 | ||
1 | 4 | 3 | 6 | ||
1 | 4 | 8 | 3 | 6 | |
1 | 4 | 8 | 3 | 6 | 10 |
1 | 4 | 8 | 3 | 6 | 10 |
Напоминание: круглые скобки в записи обратной ссылки являются синтаксической конструкцией и не задают группу.
Таким образом, регулярное выражение для данной грамматики будет выглядеть так:
Рассмотрим другой пример:
- Приведём её к нормальной форме Хомского:
- Каждому нетерминалу поставим в соответствие свой номер:
- Каждое правило представим в виде регулярного выражения с обратными ссылками:
- Объединим регулярные выражения, соответствующие одинаковым нетерминалам:
- Избавимся от внешних ссылок в регулярном выражении для :
№ | Текущее регулярное выражение |
---|---|
1. | |
2. | |
3. | |
4. | |
5. | |
6. |
1 | ||||
1 | 4 | |||
1 | 4 | 5 | ||
1 | 4 | 6 | 5 | |
1 | 4 | 6 | 5 | 7 |
1 | 4 | 6 | 5 | 7 |
Таким образом, регулярное выражение для данной грамматики будет выглядеть так:
Применение
Регулярные выражения с обратными ссылками имеют бо́льшую мощность по сравнению с обычными. С их помощью реализуются как регулярные языки, так и контекстно-свободные грамматики, а также некоторые контекстно-зависимые (например, язык тандемных повторов).
Регулярные выражения в языках программирования зачастую поддерживают обратные ссылки. На практике их можно использовать, например, для парсинга
-выражений (поиск подстрок, содержащихся в определённых тегах).См. также
- Регулярные языки: два определения и их эквивалентность
- Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора
- Нормальная форма Хомского
- Иерархия Хомского формальных грамматик