Популярные примеры работы регулярных выражений в PHP

Для справки:

. - (точка) соответствует любому символу.
{} - (фигурные скобки) нужны для обозначения количества необходимых символов. Например, w{3} - три буквы w подряд. Также есть диапозон z{2,5}, то есть z может повторяться от 2 до 5 раз.
| - (вертикальная черта) логическое или в регулярных выражениях.
\n - перевод строки
\r - так же перевод строки
\t - табуляция
\d - цифра
\D - только не цифра
\s - пробел
\S - только не пробел
\w - все буквы, цифры и знак подчеркивания "_"
\W - только не буква, цифра или подчеркивание

Модификаторы в конце выражения:

/i - делает поиск по выражению регистронезависимым. Нет разницы между заглавным и прописным символом
/U - модификатор указывает на то, что результатом поиска должен быть самый короткий отрывок, удовлетворяющий маске поиска. Рекомендую всегда использовать данный модификатор
/m - этот модификатор позволяет искать отрезок текста только внутри одной строки
/s - поиск идёт всему тексту, не обращая внимания на переносы строк
/x - игнорируются пробельные символы, в том числе символы табуляции и перевода строки

Примеры preg_replace

1. Удаляем определённую ссылку в переменной text

$text = preg_replace("~<a href=\"http://www\.aaa\">[^<]+?</a>~",'',$text);

2. Удаляем комментарии в переменной text

$text = preg_replace('#<!--.*-->#sUi', '', $text);

3. Удаляем спецсимволы

$text = preg_replace ("~(\\\|\*|\?|\[|\?|\]|\(|\\\$|\))~", "",$text);

4. Удаляем всё, что между < >

$text = preg_replace('/(<([^>]+)>)/U', '', $text);

5. Удаляем всё, что между <script> </script>

$text = preg_replace('#<script[^>]*>.*?</script>#is', '', $text);

6. Удаляем конкретные символы из строки

$text = str_replace('#39;', '', $text); // удаляем одинарные кавычки 
$text 
= str_replace('&quot;', '', $text); // удаляем двойные кавычки
$text 
= str_replace('&amp;', '', $text); // удаляем амперсанд
$text 
= preg_replace('/([?!:^~|@№$–=+*&%.,;\[\]<>()_—«»#\/]+)/', '', $text); // удаляем недоспустимые символы

7. Удаляем пробелы по бокам строки и обычные пробелы

$text = trim($text); // удаляем пробелы по бокам 
$text 
= preg_replace('/ /', '', $text); // чистим обычные пробелы
$text 
= preg_replace("/ +/", " ", $text); // множественные пробелы заменяем на одинарные

8. Удаляем лишние переводы строк и переносы

$text = preg_replace("/(\r\n){3,}/", "\r\n\r\n", $text); // убираем лишние переводы строк (больше 1 строки)

9. Удаляем расширения в названиях файлов

$file = 'image.jpg'; 
$file 
= preg_replace("/.*?\./", '', $file); // выведет image

10. Создаём функцию обработки текста

function ProcessText($text) {     
$text 
= trim($text); // удаляем пробелы по бокам     
$text 
= stripslashes($text); // удаляем слэши     
$text 
= htmlspecialchars($text); // переводим HTML в текст     
$text 
= preg_replace("/ +/", " ", $text); // множественные пробелы заменяем на одинарные     
$text 
= preg_replace("/(\r\n){3,}/", "\r\n\r\n", $text); // убираем лишние переводы строк (больше 1 строки)     
$test 
= nl2br ($text); // заменяем переводы строк на тег     
$text 
= preg_replace("/^\"([^\"]+[^=><])\"/u", "$1«$2»", $text); // ставим людские кавычки     
$text 
= preg_replace("/(«){2,}/","«",$text); // убираем лишние левые кавычки (больше 1 кавычки)     
$text 
= preg_replace("/(»){2,}/","»",$text); // убираем лишние правые кавычки (больше 1 кавычки)           
$text 
= preg_replace("/(\r\n){2,}/u", "</p><p />", $text); // ставим абзацы     
return $text; //возвращаем переменную }

11. Найти содержимое определённого тега и вставить его в другие теги

$string = preg_replace("!<title>(.*?)</title>!si","<НОВЫЙ_ТЕГ>\\1</НОВЫЙ_ТЕГ>",$string);

12. Удаляем многократно повторяющиеся знаки препинания (например, !!!! или ???!!)

$text = preg_replace('#(\.|\?|!|\(|\)){3,}#', '\1\1\1', $text);

13. Добавить или убрать текст в начале или конце переменной с текстом

$string = preg_replace("/^/", "Начало: ", $string); // в начало 
$string 
= preg_replace("/$/", " читать далее...", $string); // в конец

14. Находим все http:// и заменяем на ссылки

$text = preg_replace('#(?<!\])\bhttp://[^\s\[<]+#i',     
"<a href=\"$0\" target=_blank><u>Посмотреть на сайте</u></a>",     
nl2br
(stripslashes($text)));

15. Удаление GET-параметров из URL

$str = preg_replace('/^(.+?)(\?.*?)?(#.*)?$/', '$1$3', $url);

16. Добавить тег br в начало или конец строк

$string = preg_replace("/^/", " ", $string); // в начало всех строк  
$string 
= preg_replace("/$/", " ", $string); // в конец всех строк

17. Как разобрать email и сделать ссылку

$html = preg_replace( '/(\S+)@([а-яА-ЯёЁa-zA-Z0-9.-]+)/is', '<a href="mailto:$0">$0</a>', $text);


Примеры preg_match


1. проверка mail адреса на корректность

if (!preg_match("/^[a-zA-Zа-яА-ЯёЁ_\d][-a-zA-Zа-яА-ЯёЁ0-9_\.\d]*\@[a-zA-Zа-яА-ЯёЁ\d][-a-zA-Zа-яА-ЯёЁ\.\d]*\.[a-zA-Zа-яА-Я]{2,6}$/i", $email)) exit("Неправильный адрес"); 

2. Найти mail адреса в тексте

// \S означает "не пробел", а [a-z0-9.]+ - 
// "любое число букв, цифр или точек". Модификатор 'i' после '/'
// заставляет PHP не учитывать регистр букв при поиске совпадений.
// Модификатор 's', стоящий рядом с 'i', говорит, что мы работаем
// в "однострочном режиме" (см. ниже в этой главе).
preg_match
('/(\S+)@([а-яА-ЯёЁa-zA-Z0-9.]+)/is', "Привет от somebody@mail.ru!", $p);
// Имя хоста будет в $p[2], а имя ящика (до @) - в $p[1].
echo 
"В тексте найдено: ящик - $p[1], хост - $p[2]";

3. Является ли переменная числом, длиной от 13 до 16 символов (проверка кредитной карты)

if (!preg_match("|^[0-9]{13,16}$|", $var)) ...

4. Проверка имени файла

if (preg_match("/(^[a-zA-Z0-9]+([a-zA-Z\_0-9\.-]*))$/" , $filename)==NULL) {         
echo 
"invalid filename";         
exit; }

Архивы (zip, rar, ...)

/\.(?:z(?:ip|[0-9]{2})|r(?:ar|[0-9]{2})|jar|bz2|gz|tar|rpm)$/i

Аудио (mp3, wav, ...)

/\.(?:mp3|wav|og(?:g|a)|flac|midi?|rm|aac|wma|mka|ape)$/i

Программы (exe, xpi, ...)

/\.(?:exe|msi|dmg|bin|xpi|iso)$/i

Изображения (jpg, png, ...)

/\.(?:jp(?:e?g|e|2)|gif|png|tiff?|bmp|ico)$/i

Видео (mpeg, avi, ...)

/\.(?:mpeg|ra?m|avi|mp(?:g|e|4)|mov|divx|asf|qt|wmv|m\dv|rv|vob|asx|ogm)$/i

5. Ищем в тексте мобильные телефоны РФ

preg_match_all('/(8|7|\+7){0,1}[- \\\\(]{0,}([9][0-9]{2})[- \\\\)]{0,}(([0-9]{2}[- ]{0,}[0-9]{2}[- ]{0,}[0-9]{3})|([0-9]{3}[- ]{0,}[0-9]{2}[- ]{0,}[0-9]{2})|([0-9]{3}[- ]{0,}[0-9]{1}[- ]{0,}[0-9]{3})|([0-9]{2}[- ]{0,}[0-9]{3}[- ]{0,}[0-9]{2}))/', $text, $regs );

6. Состоит ли строка только из букв, цифр и _, длиной от 8 до 20 символов:

if (preg_match("/^[a-zа-я0-9_]{8,20}$/",$string)) echo "yes"; else echo "no";

7. Есть ли в строке идущие подряд символы, не менее 3-х символов подряд (типа абвгДДДеё, но не ааббаабб):

if (preg_match("/(.)\\1\\1/",$string)) echo "yes"; else echo "no";

8. Поиск в разных частях строки конструкции:

preg_match("/abc/", $string); // true если найдёт в любом месте  
preg_match
("/^abc/", $string); // true если найдёт в начале
preg_match
("/abc$/", $string); // true если найдёт в конце

9. Проверки на тип браузера. Возвращает true если browser = Netscape 2, 3 or MSIE 3.

preg_match("/(ozilla.[23]|MSIE.3)/i", $_SERVER["HTTP_USER_AGENT"]);


Примеры ereg


1. Проверка mail адреса в тексте

ereg("^[а-яА-ЯёЁa-zA-Z0-9_]+@[а-яА-ЯёЁa-zA-Z0-9\-]+\.[а-яА-ЯёЁa-zA-Z\-\.]+$]",  $email);

UPD: обновлено 10.05.2023

Еще нет своего сайта? Запустите интернет-магазин на платформе 5CMS - Все для продаж уже внутри!

Рекомендуем прочитать