Можно ли переписать регулярные выражения, содержащие несвязанные (неохотные) квантификаторы, чтобы использовать только жадные? - PullRequest
8 голосов
/ 20 июля 2011

Предположим, у меня есть язык регулярных выражений, поддерживающий литералы, классы положительных и отрицательных символов, упорядоченное чередование и жадные квантификаторы ?, * и +.(По сути, это подмножество PCRE без обратных ссылок, проверочных утверждений или некоторых других причудливых битов.) Увеличивает ли добавление несжатых кванторов ??, *? и +? выразительную силу этого формализма?

Другими словами, учитывая шаблон S, содержащий ненасыщенный квантификатор, можно ли переписать этот шаблон в эквивалентный шаблон T, который не содержит ненасыщенных квантификаторов?

Если этот вопрос был рассмотрен в литературеЯ был бы признателен за любые ссылки, которые любой может предоставить.Мне почти не удалось развернуть теоретическую работу о выразительной силе расширенных формализмов регулярных выражений (помимо обычных вещей о том, как обратные ссылки переводят вас из обычных языков в неконтекстные грамматики).

1 Ответ

2 голосов
/ 20 июля 2011

Когда вы говорите «Regex», вы обращаетесь к нескольким методам - ​​это не просто проблема основной теории. Рассмотрим вопрос "соответствует ли эта строка моему заданному регулярному выражению?" Для такого вопроса понятие «жадный» - это просто деталь реализации - если вы используете одну из распространенных (но неэффективных) реализаций обратного отслеживания, это может повлиять на производительность, но не на вывод. Точно так же вопрос "содержит ли эта строка совпадение?" не зависит от жадных и не жадных квантификаторов. Этот первый тип регулярных выражений связан с абстрактным понятием принадлежности к множеству: определение языка соответствующих строк.

Так почему же вообще существуют не жадные квантификаторы? Регулярные выражения не просто используются для сопоставления; общие реализации могут найти , где совпадение и какие части регулярного выражения соответствуют каким частям вывода. При этом пользователь зависит от тонкостей реализации, что не является тривиальным. Этот второй тип регулярных выражений связан с получением нескольких фрагментов текста в более практичном представлении в контексте контекста языка, полного тьюринга.

Обычно, когда вы говорите о силе формализма регулярных выражений, вы говорите о первом мире, в котором компьютер отвечает простым да или нет. Об этом легко говорить, потому что спецификация понятна. Когда вы говорите о «жадном» и «не жадном» квантификаторе, вы говорите о «втором мире», который используется на практике много, но со спецификацией, которая в основном выросла без особого планирования для решения реальных проблем и является стандартом благодаря обратной совместимости , Этот второй мир решает совершенно другие проблемы, и мне не ясно, что здесь означает «выразительная сила». Конечно, нежадный может быть практичным; и в этом вся суть ...

Нежадные квантификаторы ничего не делают для первого типа выразительности, и они делают для второго, хотя не совсем понятно, что означает здесь «выразительная сила».

...