Различия

Показаны различия между двумя версиями страницы.


regexp_php [2021/07/31 21:58] (текущий) – создано - внешнее изменение 127.0.0.1
Строка 1: Строка 1:
 +====== RegExp в PHP ======
 +~~Title: Регулярные выражения в PHP ~~
 +{{htmlmetatags>
 +metatag-description=(Использование регулярных выражений в PHP PCRE и POSIX.)
 +}}
 +Регулярные выражения в [[PHP]].
 +  * см. [[RegExp]]
 +  * [[http://www.php.net/manual/ru/book.pcre.php|Функции для работы с регулярными выражениями (Perl-совместимые)]]
 +  * [[http://www.php.net/manual/ru/book.regex.php|Регулярные выражения (расширенные POSIX)]]
 +  * [[http://php.net/manual/ru/regexp.reference.unicode.php|Свойства Unicode-символов]]
 +  * [[http://www.php.su/articles/?cat=regexp&page=008|PHP. Регулярные выражения (шаблоны)]]
  
 +PHP поддерживает два стиля синтаксиса регулярных выражений [[POSIX]] и [[Perl]]. Стиль POSIX встроен в PHP по умолчанию, а стиль Perl доступен после компиляции с библиотекой [[PCRE]].
 +{{ ::regexp_v_php.jpg?nolink |}}
 +
 +====== PHP PCRE ======
 +В [[PHP]] для работы с регулярными выражениями [[PCRE]] используются несколько функций.
 +===== preg_match =====
 +[[http://php.net/manual/ru/function.preg-match.php|php.net: preg_match]] прекращает свою работу после первого найденного совпадения. Если необходимо найти, либо сосчитать все совпадения, следует воспользоваться функцией preg_match_all.<file>
 +int preg_match ( string pattern, string subject [, array matches [, int flags]])
 +</file>preg_match() возвращает FALSE в случае, если во время выполнения возникли какие-либо ошибки. В случае, если дополнительный параметр matches указан, он будет заполнен результатами поиска. Элемент $matches[0] будет содержать часть строки, соответствующую вхождению **всего шаблона**, $matches[1] – часть строки, соответствующую первой подмаске(то что находится внутри шаблона).
 +  * **Пример**. В HTML тексте находится одна таблица. Ее нужно вырезать в двух вариантах, первый с тегами <table></table>($matches[0]), второе только текст содержащийся между тегами <table></table>($matches[1]). Ниже приведенный пример можно использовать для обработки любых тегов.<file>
 +<?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>.
 +?>
 +</file>
 +<note>s (PCRE_DOTALL) Если данный модификатор используется, метасимвол "точка" в шаблоне соответствует всем символам, включая перевод строк. Без него - всем, за исключением переводов строк. Этот модификатор эквивалентен записи /s в Perl. Класс символов, построенный на отрицании, например [^a], всегда соответствует переводу строки, независимо от наличия этого модификатора. </note>
 +
 +  * **Извлекаем имя хоста и протокол из URL**<file php>
 +preg_match('@^(?:https?://)?([^/]+)@i', $usr1, $matches);
 +print_r($matches[0]);
 +</file>
 +===== preg_match_all =====
 +preg_match_all<file>
 +int preg_match_all(string pattern, string subject, array matches [, int flags [, int offset]])
 +</file>Функция работает также, как и preg_match, но ищет не только первое вхождение, а все имеющиеся и складывает их в массив matches, который для данной функции (в отличие от preg_match()) является обязательным.
 +===== preg_replace =====
 +[[http://www.php.net/manual/ru/function.preg-replace.php|preg_replace]] - выполняет поиск и замену по регулярному выражению. Выполняет поиск в строке subject совпадений с шаблоном pattern и заменяет их на replacement. В случае, если параметр limit указан, будет произведена замена limit вхождений шаблона.<file>
 +mixed preg_replace(mixed pattern, mixed replacement, mixed subject [, int limit])
 +</file>
 +  * Пример. **Чистка пробелов**.<file php>
 +<?php
 +$str = 'foo   o';
 +echo $str."\n";
 +$str = preg_replace('/\s\s+/', '', $str);
 +echo $str."\n";
 +?>
 +</file>
 +  * Пример. Удаление всех символов "-".<file php>
 +<?php
 +$str = '2012-04-05';
 +echo $str."\n";
 +$str = preg_replace('/-/', '', $str);
 +echo $str."\n";
 +?>
 +</file>
 +====== PHP POSIX ======
 +В PHP существует две функции для поиска строк при помощи регулярных выражений ereg() и eregi(). Единственное отличие между ними функция eregi() нечувствительна к регистру.
 +
 +<note warning>POSIX функции ereg() и eregi() объявлены устаревшими(DEPRECATED). Рекомендуется использовать [[PCRE]] совместимые функции.</note>

📌 Удобный подбор VPS по параметрам доступен на DIEGfinder.com - официальном инструменте проекта DIEG. Это часть единой экосистемы, созданной для того, чтобы помочь быстро найти подходящий VPS/VDS сервер для любых задач хостинга.

📌 Для тестирования скриптов, установщиков VPN и Python-ботов рекомендуем использовать надежные VPS на короткий срок. Подробнее о быстрой аренде VPS для экспериментов - читайте здесь.

💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!