аватар Автор: Сергей Касаткин | 18 октября 2013 14:13

Статьи / PHP /

Популярные примеры работы регулярных выражений в 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 PHP


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. Как конвертировать html в текст

// $document на выходе должен содержать HTML-документ.
// Необходимо удалить все HTML-теги, секции javascript,
// пробельные символы. Также необходимо заменить некоторые
// HTML-сущности на их эквивалент.

$search = array ("'<script[^>]*?>.*?</script>'si",  // Вырезает javaScript
                 "'<[\/\!]*?[^<>]*?>'si",           // Вырезает HTML-теги
                 "'([\r\n])[\s]+'",                 // Вырезает пробельные символы
                 "'&(quot|#34);'i",                 // Заменяет HTML-сущности
                 "'&(amp|#38);'i",
                 "'&(lt|#60);'i",
                 "'&(gt|#62);'i",
                 "'&(nbsp|#160);'i",
                 "'&(iexcl|#161);'i",
                 "'&(cent|#162);'i",
                 "'&(pound|#163);'i",
                 "'&(copy|#169);'i",
                 "'&#(\d+);'e");                    // интерпретировать как php-код

$replace = array ("",
                  "",
                  "\\1",
                  "\"",
                  "&",
                  "<",
                  ">",
                  " ",
                  chr(161),
                  chr(162),
                  chr(163),
                  chr(169),
                  "chr(\\1)");

$text = preg_replace($search, $replace, $document);

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

$html = preg_replace( '/(\S+)@([a-z0-9.-]+)/is', '<a href="mailto:$0">$0</a>', $text);


Примеры preg_match PHP


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

if (!preg_match("/^[-0-9a-z_\.]+@[-0-9a-z_^\.]+\.[a-z]{2,6}$/i", $email)) exit("Не правильный адрес"); 

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

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

3. Является ли переменная числом

if (!preg_match("|^[\d]+$|", $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 PHP


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

ereg("^[a-zA-Z0-9_]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$]",  $email);
 



Похожие статьи


Комментарии к статье (vk.com)