Модификаторы регулярных выражений
Механизм регулярных выражений позволяет добавлять модификаторы, влияющие на обработку регулярного выражения. Ниже рассмотрены наиболее употребительные.
i | Включение режима case-insensitive, т.е. большие и маленькие буквы в выражении не различаются. |
m | Указывает на то, что текст, по которому ведется поиск, должен рассматриваться как состоящий из нескольких строк. По умолчанию механизм регулярных выражений рассматривает текст как одну строку вне зависимости от того, чем она является на самом деле. Соответственно метасимволы ' ' и '$' указывают на начало и конец всего текста. Если же этот модификатор указан, то они будут указывать соответственно на начало и конец каждой строки текста. |
s | По умолчанию метасимвол '.' не включает в свое определение символ перевода строки. Т.е. для многострочного текста выражение /.+/ вернет только первую строку, а не весь текст, как ожидается. Указание этого модификатора снимает это ограничение. |
U | Делает все количественные метасимволы "не жадными" по умолчанию (про "жадность" количественных метасимволов см. выше) |
Рассмотрим несколько примеров:
Проверка доменного имени
Проверяем, является ли строка правильным доменным именем
$url = "http://chyvakoff.px6.ru/";if (preg_match('/^(http|https|ftp)://([A-Z0-9][A-Z0-9_-]*(?:.[A-Z0-9][A-Z0-9_-]*)+):?(d+)?/?/i', $url)) { echo "Your url is ok.";} else { echo "Wrong url.";}Подсветка слова в тексте
Это очень полезное регулярное выражение, с его помощью вы можете найти нужное слово и подсветить его. Особенно полезно для отображения результатов поиска.
$text = "Sample sentence from KomunitasWeb. Now we learn regex. 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", '<span style="background:#5fc9f6">1</span>', $text);echo $text;Подсветка результатов поиска в WordPress блоге
Как уже говорилось в предыдущем примере, этот пример кода, удобно использовать в выдаче поисковых результатов и есть отличный способ внедрить эту функцию в wordpress-блог.
Откройте ваш файл search.php, и найдите функцию the_title(). Замените ее следующим кодом:
echo $title;
Теперь, выше этой строки, добавьте этот код:
$title = get_the_title();$keys= explode(" ",$s);$title = preg_replace('/('.implode('|', $keys) .')/iu','<strong class="search-excerpt">\0</strong>',$title);Сохраните файл search.php, и откройте style.css. Добавьте следующую строку:
strong.search-excerpt { background: yellow; }Получение всех картинок из HTML-документа
Если вам когда-нибудь требовалось получить все картинки с веб-страницы, этот код должен быть Вы легко сможете создать загрузчик изображений с помощью возможностей cURL
$images = array();preg_match_all('/(img|src)=("|')[^"'>]+/i', $data, $media);unset($data);$data=preg_replace('/(img|src)("|'|="|=')(.*)/i',"$3",$media[0]);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. Повторюсь, эту функцию очень удобно использовать вместе с cURL.
function get_tag( $tag, $xml ) { $tag = preg_quote($tag); preg_match_all('{<'.$tag.'[^>]*>(.*?)</'.$tag.'>.'}', $xml, $matches, PREG_PATTERN_ORDER); return $matches[1];}Поиск XHTML/XML тэгов с определенным значением атрибута
Эта функция очень похожа на предыдущую, за исключением того, что вы можете задать тегу нужный атрибут. Например, вы легко сможете найти <div id=”header”>.
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 = "/<(".$tag.")[^>]*$attr\s*=\s*". "(['\"])$value\\2[^>]*>(.*?)<\/\\1>/" preg_match_all($tag_regex, $xml, $matches, PREG_PATTERN_ORDER); return $matches[3];}Поиск шестнадцатеричных значений цветов
Еще один полезный инструмент для веб-разработчика! Он позволяет вам находить/проверять шестнадцатеричные значение цвета.
$string = "#555555";if (preg_match('/^#(?:(?:[a-fd]{3}){1,2})$/i', $string)) {echo "example 6 successful.";}Поиск заголовка статьи
Этот фрагмент кода найдет и выведет на экран текст, находящийся внутри тэгов <title></title>, на html-странице.
$fp = fopen("http://www.catswhocode.com/blog","r");while (!feof($fp) ){ $page .= fgets($fp, 4096);} $titre = eregi("<title>(.*)</title>",$page,$regs);echo $regs[1];fclose($fp);Парсинг логов Apache
Большинство сайтов запущено на всем известном веб-сервере Apache. Если ваш сайт находится в их числе, почему бы не использовать PHP и регулярные выражения для разбора логов апача?