Популярные примеры работы регулярных выражений в 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('"', '', $text); // удаляем двойные кавычки
$text = str_replace('&', '', $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 - Все для продаж уже внутри!
-
Разберем регулярные выражения в PHP (preg_replace, preg_match) на примерах.