Preg replace php примеры. Регулярные выражения в PHP с примерами
PHP, как и полагается современному языку программирования, предлагает разработчику набор функций для использования регулярных выражений. Можно искать вхождения строк в другие строки по сложным критериям.
- PREG_PATTERN_ORDER;
- PREG_SET_ORDER.
Сортировка по первому варианту группирует результаты поиска по номеру регулярного выражения (значение по умолчанию). Во втором случае результаты группируются по месту их нахождения в строке.
Символ - элемент шаблонаВажно помнить, что шаблон оперирует символами. Программирование уже давно забыло, что такое тип данных "символ". Современные языки не опускаются ниже понятия "строка", но в отношении шаблона надо понимать: здесь манипулируют символами.
Построение шаблона - это, прежде всего, указание нужной последовательности символов. Если это четко усвоить, то ошибок в шаблоне не будет. Во всяком случае, будет гораздо меньше.
- а - это конкретный элемент шаблона - символ.
- a-z - это элемент шаблона, тоже один символ, но только со значением от a до z - вся латиница в нижнем регистре.
- 0-9 - это одна цифра, причем любая, а вот 1-3 - только 1, 2 или 3.
Регистр в шаблоне важен. Первый и последний символы шаблона имеют большое значение. Можно указать, с чего начинается шаблон и чем заканчивается.
Шаблон функцииPHP preg match all использует стандартный синтаксис регулярных выражений. обозначают один из символов, который в них указан:
- только символы a, b, c.
- [^ABC] все, кроме символов A, B, C.
- \w и \W - текстовый или не текстовый символ.
- \s и \S - пробельный или не пробельный символ.
- \d и \D - цифра или не цифра.
Символы повторения обозначаются фигурными скобками - {n,m} и относятся к предыдущему символу.
- n обозначает повторение "не менее";
- m - повторение "не более".
Синтаксис предусматривает множество вариантов для создания шаблонов, но лучше всего начинать с азов, то есть с простых, собственноручно написанных, в которых сложные элементы и комбинации отсутствуют.
Проще говоря, перечислив реальные символы, которые нужны, указав их нужные количества и учтя, что символ "^" соответствует началу, а "$" - концу строки, можно создавать простенькие шаблоны. Анализируя реальные отлаженные регулярные выражения от квалифицированных специалистов, можно обрести прочные знания для создания сложных применений preg match all. Арсенал PHP не ограничен только этими двумя функциями, но они чаще всего используются.
Простая практикаШаблон для целого числа:
- "/*/"
Тоже шаблон целого числа, но спереди может быть знак ("+", "-"), и спереди/сзади могут быть лишние пробелы:
- /^[\s|\+|\-]{0,1}*/
Аналогично:
- /^[\s|\+|\-]{0,1}*(\.)*/ - число с точкой.
- /+@+\.{2,3}/ - вариант для распознавания e-mail.
Применение собственных шаблонов для preg match all, примеры их в интернете, анализ кода страниц сайтов и другие источники позволяют сформировать собственную библиотеку шаблонов.
Вариантов для поиска информации может быть множество. В частности, приведенные последние две конструкции можно смоделировать иначе. Во многих случаях предпочтение будет иметь тот шаблон, который быстрее и точнее обеспечит нужное совпадение. Применение на PHP preg match all, как и аналогичных функций на других языках, требует практики, внимания и предварительной проверки правильности шаблонов.
В данной статье предоставлена подборка php regexp примеров. Очень хорошая и полезная коллекция примеров регулярных выражений (regular expressions). Все примеры регулярных выражений приемлемы для PHP. Пользуйтесь на здоровье!
Пример проверки доменного имениДанный, php сниппет проверяет, является ли строка допустимым доменным именем.
?:.*)+):?(d+)?/?/i", $url)) { echo "Your url is ok."; } else { echo "Wrong url."; }
Пример подсветки слова в текстеОчень полезное регулярное выражение, для поиска и подсветки нужного слова в тексте. Особенно код полезен, при создании вывода результатов поиска.
$text = "Sample sentence from KomunitasWeb, regex has become popular in web programming. Now we learn regex. According to wikipedia, Regular expressions (abbreviated as regex or regexp, with plural forms regexes, regexps, or regexen) are written in a formal language that can be interpreted by a regular expression processor"; $text = preg_replace("/b(regex)b/i", "1", $text); echo $text;
Пример реализации подсветки результатов поиска у WordPressОткройте файл search.php и найдите функцию the_title(). Замените ее следующей строкой:
Echo $title;
А теперь, перед замененной строкой вставьте этот код:
Сохраните ваш файл search.php и откройте style.css. Добавьте в него следующую строку:
Strong.search-excerpt { background: yellow; }
Пример получения изображений из HTML методом regexpДанный кусок php кода использующий регулярные выражения, ищет все изображения и адрес url к ним.
$images = array(); preg_match_all("/(img|src)=("|")[^"">]+/i", $data, $media); unset($data); $data=preg_replace("/(img|src)("|"|="|=")(.*)/i","$3",$media); foreach($data as $url) { $info = pathinfo($url); if (isset($info["extension"])) { if (($info["extension"] == "jpg") || ($info["extension"] == "jpeg") || ($info["extension"] == "gif") || ($info["extension"] == "png")) array_push($images, $url); } }
Удаление повторяющихся слов (без учета регистра)Часто встречаются слова, которые повторяются? Тогда пример этого регулярного выражения будет вам полезным.
$text = preg_replace("/s(w+s)1/i", "$1", $text);
Удаление повторяющихся точекТо же самое, только с повторяющимися точками.
$text = preg_replace("/.+/i", ".", $text);
Соответствие XML / HTML теговЭта простая функция принимает два аргумента: тег (соответствия которому вы хотите найти), xmlили html код.
Function get_tag($tag, $xml) { $tag = preg_quote($tag); preg_match_all("{]*>(.*?)."}", $xml, $matches, PREG_PATTERN_ORDER); return $matches; }
Поиск XHTML/XML тегов с определенными значениями атрибутовЭтот пример похож на предыдущую функцию, только вы можете значительно расширить поиск например найти .
Function get_tag($attr, $value, $xml, $tag=null) { if(is_null($tag)) $tag = "\w+"; else $tag = preg_quote($tag); $attr = preg_quote($attr); $value = preg_quote($value); $tag_regex = "/]*$attr\s*=\s*". "(["\"])$value\\2[^>]*>(.*?)/" preg_match_all($tag_regex, $xml, $matches, PREG_PATTERN_ORDER); return $matches; }
Поиск шестнадцатеричных значений цветаОтличный пример регулярного выражения, который ищет соответствия шестнадцатеричных значений цвета в заданных строках. Для чего это? Может быть, вы хотите написать сервис по сжатию CSS кода, или что-то подобное.
$string = "#555555"; if (preg_match("/^#(?:(?:{3}){1,2})$/i", $string)) { echo "example 6 successful."; }
Пример поиска title на заданной страницеЭтот интересный пример PHP кода с regexp ищет и возвращает текст между тегами и .
Feof($fp)){ $page .= fgets($fp, 4096); } $titre = eregi("(.*)",$page,$regs); echo $regs; fclose($fp);
Парсинг лога ApacheБольшинство сайтов работают на известных серверах Apache. Если ваш сайт также работает на нем, то можно сделать парсинг лога сервера с помощью php regexp.
//Logs: Apache web server //Successful hits to HTML files only. Useful for counting the number of page views. "^((?#client IP or domain name)S+)s+((?#basic authentication)S+s+S+)s+[((?#date and time)[^]]+)]s+"(?:GET|POST|HEAD) ((?#file)/[^ ?"]+?.html?)??((?#parameters)[^ ?"]+)? HTTP/+"s+(?#status code)200s+((?#bytes transferred)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#user agent)[^"]*)"$" //Logs: Apache web server //404 errors only "^((?#client IP or domain name)S+)s+((?#basic authentication)S+s+S+)s+[((?#date and time)[^]]+)]s+"(?:GET|POST|HEAD) ((?#file)[^ ?"]+)??((?#parameters)[^ ?"]+)? HTTP/+"s+(?#status code)404s+((?#bytes transferred)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#user agent)[^"]*)"$"
Пример проверки сложности пароляОтличный пример регулярного выражения, которое проверяет уровень сложности пароля. Пароль должен состоять из 6 символов, содержать хотя бы: один заглавный символ, строчный символ, цифру.
"A(?=[-_a-zA-Z0-9]*?)(?=[-_a-zA-Z0-9]*?)(?=[-_a-zA-Z0-9]*?)[-_a-zA-Z0-9]{6,}z"
Замена текстовых смайликов на графические смайликиДанный пример кода будет менять текстовый смайлик, на ваш графический. Интересный и полезный php сниппет.
$texte="A text with a smiley:-)"; echo str_replace(":-)","",$texte);
Пример регулярного выражения для получения изображений из html кодаСтоит сказать, что данный php код используется в wordpress, для поиска и обработки изображений.