Инструменты пользователя

Инструменты сайта


Боковая панель

Связь

regexp_php

RegExp в PHP

Регулярные выражения в PHP.

PHP поддерживает два стиля синтаксиса регулярных выражений POSIX и Perl. Стиль POSIX встроен в PHP по умолчанию, а стиль Perl доступен после компиляции с библиотекой PCRE.

PHP PCRE

В PHP для работы с регулярными выражениями PCRE используются несколько функций.

preg_match

php.net: preg_match прекращает свою работу после первого найденного совпадения. Если необходимо найти, либо сосчитать все совпадения, следует воспользоваться функцией preg_match_all.

int preg_match ( string pattern, string subject [, array matches [, int flags]])

preg_match() возвращает FALSE в случае, если во время выполнения возникли какие-либо ошибки. В случае, если дополнительный параметр matches указан, он будет заполнен результатами поиска. Элемент $matches[0] будет содержать часть строки, соответствующую вхождению всего шаблона, $matches[1] – часть строки, соответствующую первой подмаске(то что находится внутри шаблона).

  • Пример. В HTML тексте находится одна таблица. Ее нужно вырезать в двух вариантах, первый с тегами <table></table>($matches[0]), второе только текст содержащийся между тегами <table></table>($matches[1]). Ниже приведенный пример можно использовать для обработки любых тегов.
    <?php
    /*
     * Обработка результата вывода утилиты ipcalc. Ключ -h позволяет получить результат в HTML.
     */
    
    $IPs = '10.26.95.0/24';
    $escaped_IPs = 'ipcalc -h '.escapeshellcmd($IPs);
    $output = shell_exec($escaped_IPs);
    
    preg_match('|<table(.*)</table>|Uis', $output, $matches);
    
    print_r($matches[0]); // результат с тегами <table></table>. Весь шаблон.
    print_r($matches[1]); // результат содержимое тегов <table></table>.
    ?>
s (PCRE_DOTALL) Если данный модификатор используется, метасимвол "точка" в шаблоне соответствует всем символам, включая перевод строк. Без него - всем, за исключением переводов строк. Этот модификатор эквивалентен записи /s в Perl. Класс символов, построенный на отрицании, например [^a], всегда соответствует переводу строки, независимо от наличия этого модификатора.
  • Извлекаем имя хоста и протокол из URL
    preg_match('@^(?:https?://)?([^/]+)@i', $usr1, $matches);
    print_r($matches[0]);

preg_match_all

preg_match_all

int preg_match_all(string pattern, string subject, array matches [, int flags [, int offset]])

Функция работает также, как и preg_match, но ищет не только первое вхождение, а все имеющиеся и складывает их в массив matches, который для данной функции (в отличие от preg_match()) является обязательным.

preg_replace

preg_replace - выполняет поиск и замену по регулярному выражению. Выполняет поиск в строке subject совпадений с шаблоном pattern и заменяет их на replacement. В случае, если параметр limit указан, будет произведена замена limit вхождений шаблона.

mixed preg_replace(mixed pattern, mixed replacement, mixed subject [, int limit])
  • Пример. Чистка пробелов.
    <?php
    $str = 'foo   o';
    echo $str."\n";
    $str = preg_replace('/\s\s+/', '', $str);
    echo $str."\n";
    ?>
  • Пример. Удаление всех символов "-".
    <?php
    $str = '2012-04-05';
    echo $str."\n";
    $str = preg_replace('/-/', '', $str);
    echo $str."\n";
    ?>

PHP POSIX

В PHP существует две функции для поиска строк при помощи регулярных выражений ereg() и eregi(). Единственное отличие между ними функция eregi() нечувствительна к регистру.

POSIX функции ereg() и eregi() объявлены устаревшими(DEPRECATED). Рекомендуется использовать PCRE совместимые функции.



regexp_php.txt · Последние изменения: 2017/08/02 19:43 — darkfire