Функции для работы с регулярными выражениями в PHP
В прошлой статье мы разобрали значение регулярных выражений. Вы теперь должны знать, что такое регулярное выражение и где оно используются. А в этой статье мы уже коснёмся регулярных выражений непосредственно в конкретном языке программировании и разберём все необходимые функции для работы с регулярными выражениями в PHP.
Первым делом, давайте перечислю все те функции, что постоянно используется, когда нужно работать с регулярными выражениями в PHP:
-
Функция preg_match(string pattern, string subject, array matches) - данная функция ищет совпадения в строке subject регулярному выражению pattern. Первое найденное совпадение помещается в массив matches. Обратите внимание, что эта функция ищет только первое совпадение. Второе, третье и так далее она не ищет! Массив matches будет таким:
- Первый элемент содержит всю совпавшую часть строки в целом.
- Второй элемент содержит часть строки, совпавшей с первым субпаттерном (что такое субпаттерны будет разобрано в одной из следующих статей).
- Третий элемент содержит часть строки, совпавшей с вторым субпаттерном.
- И так далее.
- Функция preg_match_all(string pattern, string subject, array matches) - полный аналог функции preg_match(), но здесь поиск совпадений продолжается и после первого найденного. То есть если функция preg_match() останавливает свою работу после первого найденного совпадения, то функция preg_match_all() идёт дальше. Возвращает эта функция - количество совпадений (разумеется, их может быть больше 1-го).
- Функция preg_replace(mixed pattern, mixed replacement, mixed subject, int limit). Очень полезная функция, которая в строке subject заменяет строки, соответствующие pattern, на replacement. Количество замен задаётся параметром limit. Если данный параметр не указан (а он является необязательным), то будет проведена замена всех найденных совпадений.
Теперь же давайте приведу простой пример использования какой-нибудь из этой функции, чтобы Вы посмотрели всё на практике:
<?php
//Создаём строку с e-mail
$str = "Вот мой e-mail: [email protected], пишите...";
//Проверяем строку на наличие e-mail с помощью регулярных выражений и затем выводим соответствующий результат
if (preg_match("/[a-z0-9_-]+(\.[a-z0-9_-]+)*@([0-9a-z][0-9a-z-]*[0-9a-z]\.)+([a-z]{2,4})/i", $str)) echo "E-mail найден";
else echo "E-mail не найден";
?>
В результате, как Вы и догадались появится строка: "E-mail найден". В данном примере написано регулярное выражение, которое Вы пока понимать не должны. Уже начиная со следующей статьи, мы с Вами будем учиться составлять регулярные выражения, а пока просто примите как должное: регулярное выражение в примере ищет e-mail в заданной строке.
Функций для работы с регулярными выражениями в PHP несколько больше, но вот этот список - это самые важные и самые главные. Их надо обязательно знать и уметь применять! Лично я эти функции применял такое количество раз, что не сосчитать. И заранее могу сказать, что если встанет вопрос о применении регулярных выражений в PHP, то Вы этими функциями и будете пользоваться.
-
- Михаил Русаков
Комментарии (10):
А не подскажите в чем может быть проблема: Писал для сайта функцию поиска и все вроде работало нормально, но заметил что если в поисковом запросе есть-(дефис) то поиск не работает: preg_match("/$arr[$i]/i",$value['title'])) вот основная функция для поиска, где $arr[i] - поисковой запрос
Ответить
Поставьте перед preg_match() вот это: $arr[$i] = quotemeta($arr[$i]);
Ответить
Спасибо, идею понял, но почему то не сработало все равно
Ответить
а,нет- все норм, в другом ошибка.
Ответить
А как проверять если при обращении к скрипту обработчику он должен вернутся редиректом обратно,,,а как же быть с проверкой на правильность мыла если выводит сообщение об ошибке в том же файле и при обращении к обработчику он выдаёт ошибку на строку с редиректом и надпись о том что мыло правильное...Как тогда сделать???Использовать сессии для комментов не выгодно
Ответить
Так и делать редирект в конце обработчика, не вижу тут проблемы. И редирект можно выводить только если почта прошла проверку, если нет, то выводить ошибку там же.
Ответить
Как я сам не догадался редирект ввести в иф и радоваться жизни...Спасибо вам
Ответить
Проверять email регулярным выражением плохая идея, в вашем примере будет отсеиваться некоторая часть email адрессов, например есть доменные зоны состоящие из 5 символов. А так же появились доменны на русском языке, вы не задумывались над этим вопросом?
Ответить
Посмотрите на дату публикации статьи, тогда еще не было доменов с кириллицей.
Ответить
А в общем, проверять специальной функцией email тоже не очень хорошо. Я пробовал как-то раз, она некоторые ошибочные пропускает
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.