Документация PHP


Описание синтаксиса Perl-совместимых регулярных выражений

Регулярные выражения в деталях

Описание синтаксиса Perl-совместимых регулярных выражений

PHP Manual


Отличия от Perl

Разница описана относительно версии Perl 5.005.

  1. По умолчанию пробельными символами являются все символы, распознаваемые библиотечной функцией языка Си isspace(). Это позволяет собрать PCRE библиотеку с произвольными символьными наборами. В стандартной поставке функция isspace() определяет как пробельные следующие символы: пробел, разрыв страницы, начло строки, перевод каретки, горизонтальную и вертикальную табуляцию. Начиная с версии Perl 5.002, символ вертикальной табуляции \v не является пробельным и, соответственно, не соответствует классу символов \s.
  2. PCRE не позволяет использовать квантификаторы повторения в условных выражениях. Perl позволяет это делать, но получаемый результат может существенно отличаться от ожидаемого. Например, (?!a){3} не означает, что три следующих символа будут не 'a'. Он всего лишь трижды утверждает, что следующий символ не 'a'.
  3. Во время сопоставления подмаски, находящейся внутри отрицающего условного выражения, счетчик подмасок увеличивается, но сами значения, зафиксированные такой подмаской, не возвращаются (в результирующем массиве по соответствующим смещениям находятся пустые строки). Perl устанавливает значения соответствующих числовых переменных исходя из предшествующей модмаски, найденной непосредственно перед тем, как отрицающее условие не смогло быть сопоставлено (и таким образом выполнилось), но только в том случае, если условное выражение содержит только одну ветвь.
  4. Несмотря на то, что символ, соответствующий ASCII-коду 0 (бинарный ноль), допускается в обрабатываемом тексте, он недопустим в шаблоне (так как передается в качестве аргумента Си-функции как нормальная строка, завершаемая нулевым символом). Cледующая служебная последовательность "\\x00" может быть использована для представления бинарного ноля.
  5. Следующие служебные последовательности, используемые в Perl, не поддерживаются: \l, \u, \L, \U, \E, \Q. Это связано с тем, что обработка указанных последовательностей производится внутренним Perl-механизмом обработки строк и не является частью механизма регулярных выражений.
  6. Perl модификатор \G не поддерживается, так как он не входит в рамки простого сопоставления шаблону.
  7. Достаточно очевидно, что PCRE не поддерживает конструкции вида (?{code}).
  8. Теперь немного о чудаковатости в Perl 5.005_02, связанной с фиксацией результата в случае, когда часть шаблона повторяется. Например, применяя шаблон /^(a(b)?)+$/ к строке "aba", переменная $2 соответствует 'b'. Но при применении шаблона /^(aa(bb)?)+$/ к строке "aabbaa" переменная $2 оказывается неустановленной. А в случае, если шаблон изменить на /^(aa(b(b))?)+$/, переменные $2 и $3 окажутся установленными. В Perl 5.004, в обоих случаях переменная $2 будет содержать соответствующее значение, что соответствует PCRE. Если в будущем Perl изменит поведение в данной ситуации, PCRE также может измениться.
  9. Еще одна несовместимость, не находящая разумного объяснения. Шаблон /^(a)?(?(1)a|b)+$/ соответствует строке 'a' в PERL, но не в PCRE. В то же время шаблон /^(a)?a/ соответствует строке 'a' и в Perl и в PCRE, оставляя переменную $1 неустановленной.
  10. PCRE также предоставляет некоторое расширение возможностей Perl для обработки регулярных выражений:

    1. Несмотря на то, что условное выражение, ссылающееся на предыдущие вхождения, должно соответствовать строке фиксированной длины, каждая ветка такого выражения в отдельности может соответствовать строке произвольной длины (отличающейся от длины других веток). В то время как Perl 5.005 требует, чтобы все они имели одинаковую длину.
    2. В случае, если модификатор PCRE_DOLLAR_ENDONLY используется и PCRE_MULTILINE не используется, специальный символ '$' соответствует исключительно концу обрабатываемых данных.
    3. В случае, если модификатор PCRE_EXTRA используется, обратный слеш, за которым следует символ, не имеющий специального значения, приводит к ошибке.
    4. Модификатор PCRE_UNGREEDY инвертирует жадность квантификаторов, таким образом они по умолчанию не жадные. Но становятся жадными, если за ними следует символ '?'.


Описание синтаксиса Perl-совместимых регулярных выражений

Регулярные выражения в деталях

Описание синтаксиса Perl-совместимых регулярных выражений

PHP Manual

SAPE все усложнил?

MainLink - простая и прибыльная продажа ссылок!

Последние поступления:

Размещена 10 августа 2020 года

Я по ТВ видел, что через 10 лет мы будем жить лучше, чем в Германии...
Я не понял, что это они с Германией сделать хотят?!

читать далее…

ТехЗадание на Землю

Размещена 14 марта 2018 года

Пpоект Genesis (из коpпоpативной пеpеписки)

читать далее…

Шпаргалка по работе с Vim

Размещена 05 декабря 2017 года

Vim довольно мощный редактор, но работа с ним не всегда наглядна.
Например если нужно отредактировать какой-то файл например при помощи crontab, без знания специфики работы с viv никак.

читать далее…

Ошибка: Error: Cannot find a valid baseurl for repo

Размещена 13 сентабря 2017 года

Если возникает ошибка на centos 5 вида
YumRepo Error: All mirror URLs are not using ftp, http[s] or file.
Eg. Invalid release/

читать далее…

Linux Optimization

Размещена 30 июля 2012 года

Prelink

читать далее…