Для справки... . - (точка) соответствует любому символу. {} - (фигурные скобки) нужны для обозначения количества необходимых символов. Например, 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('"', '', $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. Как конвертировать 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-zA-Z0-9.-]+)/is', '<a href="mailto:$0">$0</a>', $text);
Примеры preg_match PHP
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 PHP
1. Проверка mail адреса в тексте
ereg("^[а-яА-ЯёЁa-zA-Z0-9_]+@[а-яА-ЯёЁa-zA-Z0-9\-]+\.[а-яА-ЯёЁa-zA-Z\-\.]+$]", $email);