Войти Регистрация

PHP regexp: примеры регулярных выражений


В данной статье предоставлена подборка php regexp примеров. Очень хорошая и полезная коллекция примеров регулярных выражений (regular expressions). Все примеры регулярных выражений приемлемы для PHP. Пользуйтесь на здоровье!

Пример проверки доменного имени

Данный, php сниппет проверяет, является ли строка допустимым доменным именем.

$url = "http://sitear.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, 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", '<span style="background:#5fc9f6">1</span>', $text);

echo $text;

Пример реализации подсветки результатов поиска у WordPress

Откройте файл search.php и найдите функцию the_title(). Замените ее следующей строкой:

echo $title;

А теперь, перед замененной строкой вставьте этот код:

<?php

                $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 методом regexp

Данный кусок php кода использующий регулярные выражения, ищет все изображения и адрес url к ним.

$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 код.

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];

}

Поиск шестнадцатеричных значений цвета

Отличный пример регулярного выражения, который ищет соответствия шестнадцатеричных значений цвета в заданных строках. Для чего это? Может быть, вы хотите написать сервис по сжатию CSS кода, или что-то подобное.

$string = "#555555";

if (preg_match('/^#(?:(?:[a-fd]{3}){1,2})$/i', $string)) {

echo "example 6 successful.";

}

Пример поиска title на заданной странице

Этот интересный пример PHP кода с regexp ищет и возвращает текст между тегами <title> и </title>.

$fp = fopen("http://sitear.ru","r");

while (!feof($fp) ){

    $page .= fgets($fp, 4096);

}

$titre = eregi("<title>(.*)</title>",$page,$regs);

echo $regs[1];

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/[0-9.]+"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/[0-9.]+"s+(?#status code)404s+((?#bytes transferred)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#user agent)[^"]*)"$'

Пример проверки сложности пароля

Отличный пример регулярного выражения, которое проверяет уровень сложности пароля. Пароль должен состоять из 6 символов, содержать хотя бы: один заглавный символ, строчный символ, цифру.

'A(?=[-_a-zA-Z0-9]*?[A-Z])(?=[-_a-zA-Z0-9]*?[a-z])(?=[-_a-zA-Z0-9]*?[0-9])[-_a-zA-Z0-9]{6,}z'

Замена текстовых смайликов на графические смайлики

Данный пример кода будет менять текстовый смайлик, на ваш графический. Интересный и полезный php сниппет.

$texte='A text with a smiley :-)';

echo str_replace(':-)','<img src="smileys/souriant.png">',$texte);

Пример регулярного выражения для получения изображений из html кода

Стоит сказать, что данный php код используется в wordpress, для поиска и обработки изображений.

<?php if (have_posts()) : ?>

<?php while (have_posts()) : the_post(); ?>

<?php

$szPostContent = $post->post_content;

$szSearchPattern = '~<img [^>]* />~';

// Run preg_match_all to grab all the images and save the results in $aPics

preg_match_all( $szSearchPattern, $szPostContent, $aPics );

// Check to see if we have at least 1 image

$iNumberOfPics = count($aPics[0]);

if ( $iNumberOfPics > 0 ) {

     // Здесь вы можете обрабатывать ваши изображения

     // В данном примере они просто выведутся на монитор

     for ( $i=0; $i < $iNumberOfPics ; $i++ ) {

          echo $aPics[0][$i];

     };

};

endwhile;

endif;

?>

Надеюсь, вам была полезна подборка примеров php regexp. Если есть интересные дополнения или примеры регулярных выражений (php), пишите в комментариях.



Дальше: Бизнес основы создания сайтов


Дискуссия по теме     6 Комментариев
Добавить комментарий
dominator 31.10.2012 в 20:58
А вы проверяли данные регулярки? Например, ваша проверка доменного имени, выводит ошибку: Unknown modifier '/'.
slava34 19.02.2012 в 10:53
Спасибо, попробую, но дело в том, что я использую Xedant Human Emulator, который понимает регулярки, а с библиотекой simplehtmldom его наверное не заставишь работать...
slava34 15.02.2012 в 01:18
А как решить такую задачу? Имеется html страница, сохраненная в текстовом формате, с текстом и разными сылками, там есть ссылка - http://www.google.com/recaptcha/api/image?c=03AHJ_VusbLjn... как извечь и записать первую такую ссыку (там их несколько) в чистом виде, в другой txt файл используя как признак - часть этой ссылки - recaptcha/api/image Нужен универсальный скрипт, что бы можно было вытаскивать другие ссылки используя как признак их часть, самому подставляя эти признаки в шаблон.
Тарас 15.02.2012 в 01:19
По правде говоря, я пользуюсь регулярками редко, мне удобнее использовать библиотеку simplehtmldom, можно вытянуть все href значения из ссылок и сравнивать с шаблоном (признаками), вариантов масса, это вопрос логики. http://sitear.ru/material/php-parsing-html-simple-html-dom
Гость 06.02.2012 в 19:05
Пример проверки доменного имени сейчас данный пример уже не совсем полный, так как теперь есть кириллические имена доменов. А в этом примере уже не сработает проверка доменного имени...
Тарас 08.02.2012 в 11:57
Да, все меняется... а статьи старые, за всем не вследиш.
Добавить комментарий
Просмотров: 19236