Где большинство реализаций REGEX попадают в шкалу сложности?


19

Большинство современных реализаций регулярных выражений, таких как perl или .NET, выходят за рамки классического компьютерного определения REGEX с такими функциями, как lookahead и lookbehind. Позволяют ли эти функции анализировать операторы, которые не могут быть описаны конечным автоматом без нажатия? Насколько ближе к завершению это делает их, если они могут?


2
Тесно связанный вопрос: есть ли у нас что-нибудь интересное между «регулярными выражениями с обратными ссылками» и «регулярными выражениями, которые могут содержать произвольный программный код»? Например, регулярные выражения с обратными ссылками и lookahead / lookbehind являются строго более выразительными, чем регулярные выражения с обратными ссылками, но без lookahead / lookbehind? А как насчет "Специальных глаголов контроля возврата" в Perl?
Юкка Суомела

Связано (и, возможно, неправильно): stackoverflow.com/questions/2974210/…
Aryabhata

Ответы:


18

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

Проблема заключается в характеристике обратных ссылок, которые являются одновременно очень мощными и очень ограниченными: они позволяют описывать некоторые неконтекстно-свободные языки, не допуская использования некоторых контекстно-свободных языков. Например, регулярное выражение (a*)b\1b\1соответствует строкам вида пб пб п , и вы можете использовать насосную лемму , чтобы показать , что это не контекстно-свободный язык. Однако, с другой стороны, регулярные выражения с обратными ссылками не кажутся достаточными для соответствия языку сбалансированных скобок, который является прототипным языком без контекста.anbanban

Достаточно просто дать денотационную семантику, в которой говорится о том, какие строки есть в языке для регулярных выражений, но дать хорошую теоретико-автоматную характеристику кажется гораздо более сложной задачей. Это что-то вроде регистрационной машины, в чьи регистры вы можете копировать подстроки вашего ввода, и которую вы можете использовать для проверки вашей текущей строки, но для которой у вас нет возможности изменять эти регистры.

У людей, занимающихся теорией конечных моделей, есть куча модных моделей машин, и было бы интересно узнать, соответствует ли это какой-либо из их моделей.


9

/(.*)\1/L={ww|wΣ}wKLK={ww|wΣ,w∣≤K}K

Но в принципе регулярные выражения, как указано, являются более мощными, чем обычные языки, поскольку этот связанный с этим вопрос обсуждается гораздо более подробно (также с изящным примером).


Разве {ww | w ∈ Σ ∗, ∣w∣≤K} не будет распознаваемым CSL или TM ??
dhruvbird

arggh. должен был сделать ww ^ R. починю. спасибо
Суреш Венкат

На самом деле у меня возник вопрос по этому поводу. Является ли ww CSL или Тьюринг узнаваем? Я (пока) не смог придумать LBA для этого, поэтому просто
удивляюсь

1
{ww:wΣ}

5

Один интересный результат, взятый из этого другого вопроса , также связанного Сурешем Венкатом, состоит в том, что «практические» регулярные выражения являются NP-полными, и поэтому они должны быть эквивалентны по мощности SAT.

Будучи не экспертом, хотя я согласен с тем, что интуитивно «регулярных выражений с обратными ссылками кажется недостаточно для соответствия языку сбалансированных скобок», происходит нечто странное. NP-полнота подразумевает, что любая NP-проблема может быть полиномиально сведена к регулярному выражению, поэтому, вероятно, существует просто полиномиальное сокращение от языка «сбалансированных скобок» до того, который можно распознать с помощью регулярных выражений. Но опять же, может быть какое-то абсурдное регулярное выражение для разбора CFL, так как они могут даже разбирать непростые унарные числа!

Вероятно, урок заключается в том, что классы сложности и языковые классы в целом несопоставимы. Что также предлагает перефразировать ваш вопрос, ссылаясь на иерархию Хомского, а не на «шкалу сложности» (даже если честно, меня это не смутило).

Чарльз Стюарт пишет:

Ахо, 1990, «Алгоритмы поиска шаблонов в строках» показывает, что проблема членства для обычных языков с возвратом назад является NP-полной.

Частичный предварительный просмотр (по крайней мере, утверждения) можно найти в Google Книгах , на странице 289, а библиографическую ссылку на статью можно найти здесь . Обратите внимание, что в статье rewbr расшифровывается как Regular Expression With BackReferences.


3

PCRE, самая популярная реализация «регулярных выражений», также реализует рекурсивные шаблоны, которые выходят за рамки обратных ссылок. Вопросы об их сложности только что задавались в Stackoverflow. Согласно практическому подробному ответу Perl guru brian d foy, это делает PCRE таким же мощным, как и контекстно-свободные грамматики. Однако синтаксис ужасен по сравнению с формой Бэкуса-Наура.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.