Как называется диалект / реализация регулярных выражений Perl? - PullRequest
4 голосов
/ 25 мая 2011

Движок для разбора строк, который в Perl называется «регулярные выражения», очень отличается от того, что известно в книгах термином «регулярные выражения».

Итак, мой вопрос: есть ли какой-нибудь документ, описывающий реализацию регулярного выражения в Perl, и как и чем она действительно отличается от классической (под классической я имею в виду регулярные выражения, которые действительно можно преобразовать в обычныеDFA / NFA) и как это работает?

Спасибо.

Ответы [ 5 ]

7 голосов
/ 25 мая 2011

Регулярные выражения Perl, конечно, называются регулярными выражениями Perl, или, для краткости, регулярными выражениями. Их также можно назвать шаблонами или правилами. Но то, что они , или, по крайней мере, могут быть, - это парсеры рекурсивного спуска . Они реализованы с использованием рекурсивного средства отслеживания изменений, хотя вы можете поменять его на механизме DFA , если предпочитаете выгружать в него задачи, решаемые с помощью DFA.

Вот некоторые уместные цитаты по этим вопросам, со всей ободрением - и некоторые тексты :) - мои:

Вы указываете шаблон, создавая регулярное выражение (или regex ), и механизм регулярных выражений Perl («Engine», для остальной части этого глава) затем принимает это выражение и определяет, является ли (и как) шаблон соответствует вашим данным. Хотя большая часть ваших данных, вероятно, будет текстовые строки, ничто не мешает вам использовать регулярные выражения для поиска и замените любую последовательность байтов, даже то, что вы обычно считаете «Двоичные» данные. Для Perl байты - это просто символы, которые имеют порядковое значение меньше 256.

Если вы знакомы с регулярными выражениями из других мест, мы должен предупредить вас, что регулярные выражения немного отличаются в Perl. Во-первых, они не совсем «регулярны» в теоретическом смысле слово, что означает, что они могут сделать гораздо больше, чем традиционные обычные выражения, преподаваемые на уроках информатики. Во-вторых, они используются так часто в Perl, что у них есть свои специальные переменные, операторы, и цитирование соглашений, которые тесно связаны с языком, не просто болтается как любая другая библиотека.

- Программирование на Perl , Ларри Уоллом, Томом Кристиансеном и Джоном Орвантом

Это Апокалипсис при сопоставлении с образцом, обычно связанный с что мы называем «регулярными выражениями», которые лишь незначительно связаны с реальные регулярные выражения. Тем не менее, термин вырос с возможности наших механизмов сопоставления с образцом, поэтому я не буду пытаться бороться с языковой необходимостью здесь. Я, как правило, буду называть их «Регулярные выражения» (или «регулярные выражения», когда я нахожусь в англосаксонском настроении).

- Perl6 Апокалипсис 5: сопоставление с образцом , Ларри Уолл

Там много нового синтаксиса, поэтому давайте медленно пройдемся по нему, начиная с:

    $file = rx/ ^  <$hunk>*  $ /;

Этот оператор создает объект шаблона. Или, как известно в Perl 6, «Правило». Люди, вероятно, все еще будут называть их «регулярными выражениями» или «Regexes» тоже (и ключевое слово rx отражает это), но паттерны Perl длинные назад перестало быть чем-то вроде «обычного», , поэтому мы попытаемся избежать условия.

[Обновление: мы воскресили термин «регулярное выражение» для ссылки на эти шаблоны в генеральный. Когда мы говорим «правило» сейчас, мы имеем в виду регулярных выражений, которые вы бы использовали в грамматике. См. S05.]

- Perl6 Exegesis 5: Сопоставление с образцом , Дамиан Конуэй

В этом документе кратко изложен Апокалипсис 5, в котором рассказывается о новом синтаксисе регулярных выражений. Теперь мы попытаемся назвать их regex вместо «регулярных выражений», потому что они не были регулярными выражениями в течение долгого времени, и мы думаем, что популярный термин "регулярное выражение" находится в процессе превращения в технический термин с точное значение: «что-то, что вы делаете с шаблоном, вроде как обычный выражение ». С другой стороны, одна из целей редизайна состоит в том, чтобы сделать части наших шаблонов более пригодными для анализа под традиционная семантика регулярных выражений и синтаксический анализатор, и это включает в себя проводя тщательное разграничение между частями наших моделей и грамматики следует рассматривать как декларативные, а какие части как процедурные.

В любом случае при обращении кo рекурсивные шаблоны в грамматике, термины rule и token обычно предпочтительнее, чем regex .

- Perl6Синопсис 5. Регулярные выражения и правила . Автор - Дамиан Конуэй, Эллисон Рэндал, Патрик Мишо, Ларри Уолл и Мориц Ленц

.
4 голосов
/ 25 мая 2011

Книга О'Рейли 'Освоение регулярных выражений' очень хорошо объясняет Perl и другие движки.Для меня это справочник по теме.

2 голосов
/ 26 мая 2011

Я задал тот же вопрос на теоретической бирже стеков CS ( Регулярные выражения не ), а ответ , получивший наибольшее количество голосов , был «regex».

2 голосов
/ 25 мая 2011

Формальное математическое название для языка, принятого PCRE, отсутствует.

Термин "регулярные выражения с обратным отслеживанием " или "регулярные выражения с обратными ссылками" примерно так же близок, как и вы.получить.Любой, кто знаком с разницей, поймет, что вы имеете в виду.

(Существует только два распространенных типа реализаций регулярных выражений: на основе DFA и на основе обратного отслеживания. Первые обычно принимают «обычные языки» в традиционном компьютере.Смысл науки. Последние обычно принимают ... Больше, и это зависит от конкретной реализации, но обратные ссылки всегда являются одной из функций, не связанных с DFA.)

0 голосов
/ 25 мая 2011
  • Диалект называется PCRE (Perl-совместимые регулярные выражения).
  • Это задокументировано в Руководстве по Perl .
  • Или в «Программировании Perl».Уолл, Орвант и Кристиансен
...