Форум программистов, компьютерный форум, киберфорум
PHP: RegExp
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/91: Рейтинг темы: голосов - 91, средняя оценка - 4.96
1273 / 466 / 9
Регистрация: 20.04.2011
Сообщений: 2,012
1

15 регулярных выражений PHP в помощь веб-разработчику

12.10.2011, 14:31. Показов 18130. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Название: home.png
Просмотров: 2095

Размер: 41.3 КбРегулярные выражения – это очень полезный инструмент для разработчиков. С их помощью можно находить, определять или заменять текст, слова или любые другие символы. В сегодняшней статье собраны 15 наиболее полезных регулярных выражений, которые пригодятся любому веб-разработчику.

Введение в регулярные выражения
Многим начинающим разработчикам кажется, что регулярные выражения очень сложны для понимания и использования. На самом деле, все не так уж сложно, как может показаться. Прежде чем мы непосредственно перейдем к регулярным выражениям, с их полезным и универсальным кодом, давайте взглянем на основы:
Синтаксис регулярных выражений

Регулярное выражение Означает
foo
^foo Строка начинается с “foo”
foo$ Строка заканчивается на “foo”
^foo$ «foo» встречается в строке только один раз
[abc] a, b, или c
[a-z] любой символ в нижнем регистре
[^A-Z] любой символ, не находящийся в верхнем регистре
(gifjpg)
[a-z]+ Один или более символов нижнего регистра
[0-9.-] Любая цифра, точка или знак минус
^[a-zA-Z0-9_]{1,}$ Любое слово, хотя бы одна буква, число или _
([wx])([yz]) wy, wz, xy, или xz
(^A-Za-z0-9) Любой символ (не число и не буква)
([A-Z]{3}[0-9]{4})

PHP-функции для регулярных выражений
Функция Описание
preg_match() Функция preg_match() ищет строку по заданному шаблону, возвращает true, если строка находится и false, в остальных случаях
preg_match_all() Функция preg_match_all() находит все вхождения строки, заданной по шаблону
preg_replace() Функция preg_replace(), действует по тому же принципу, что и ereg_replace(), за исключением того, что регулярные выражения можно использовать как для задания шаблона поиска, так и для строки, на которую следует заменить, найденное значение.
preg_split() Функция preg_split(), действует так же как split(), за исключением того, что регулярное выражение можно использовать в качестве параметра для шаблона поиска.
preg_grep() Функция preg_grep() ищет все элементы входного массива, возвращая все элементы, соответствующие шаблону регулярного выражения.
preg_quote() Экранирует символы регулярного выражения
Проверка доменного имени

Проверяем, является ли строка правильным доменным именем
PHP
1
2
3
4
5
6
$url = "http://komunitasweb.com/";
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.";
}
Подсветка слова в тексте

Это очень полезное регулярное выражение, с его помощью вы можете найти нужное слово и подсветить его. Особенно полезно для отображения результатов поиска.
?
PHP
1
2
3
$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 блоге

Как уже говорилось в предыдущем примере, этот пример кода, удобно использовать в выдаче поисковых результатов и есть отличный способ внедрить эту функцию в wordpress-блог.
Откройте ваш файл search.php, и найдите функцию the_title(). Замените ее следующим кодом:
[PHP]1
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. Добавьте следующую строку:
PHP
1
strong.search-excerpt { background: yellow; }
Получение всех картинок из HTML-документа

Если вам когда-нибудь требовалось получить все картинки с веб-страницы, этот код должен быть Вы легко сможете создать загрузчик изображений с помощью возможностей cURL
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$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);
    }
}
Удаление повторяющихся слов (не чувствителен к регистру)

Во время печатания, часто повторяются слова? Поможет это регулярное выражение.
PHP
1
$text = preg_replace("/s(w+s)1/i", "$1", $text);
Удаление повторяющейся пунктуации

То же самое, только для пунктуации. Попрощайтесь с двойными запятыми.
PHP
1
$text = preg_replace("/.+/i", ".", $text);
Поиск XML/HTML тэгов

Эта простая функция, принимает два аргумента. Первый – это тэг, который вам нужно найти, и второй – это переменная, содержащая XML или HTML. Повторюсь, эту функцию очень удобно использовать вместе с cURL.
PHP
1
2
3
4
5
6
7
8
9
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”>.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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];
}
Поиск шестнадцатеричных значений цветов

Еще один полезный инструмент для веб-разработчика! Он позволяет вам находить/проверять шестнадцатеричные значение цвета.
PHP
1
2
3
4
$string = "#555555";
if (preg_match('/^#(?:(?:[a-fd]{3}){1,2})$/i', $string)) {
echo "example 6 successful.";
}
Поиск заголовка статьи

Этот фрагмент кода найдет и выведет на экран текст, находящийся внутри тэгов <title></title>, на html-странице.
PHP
1
2
3
4
5
6
7
8
$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 и регулярные выражения для разбора логов апача?
PHP
1
2
3
4
5
6
7
//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)[^"]*)"$'
амена двойных кавычек “умными” кавычками

Если вы любитель типографики, вам понравится это регулярное выражение, заменяющее обычные двойные кавычки, на “умные кавычки”. Похожее регулярное выражение используется в wordpress в контенте страницы.
?
1
preg_replace('B"b([^"x84x93x94rn]+)b"B', '?1?', $text);
Комплексная проверка пароля

Это регулярное выражение будет следить за тем, чтобы в текстовое поле было введено не менее шести символов, цифры, дефисы и подчеркивания.
Текстовое поле должно содержать как минимум один символ верхнего регистра, один нижнего регистра и одну цифру.
PHP
1
'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'
WordPress: Использование регулярного выражения для получения картинок из записи

Поскольку многие из вас являются пользователями WordPress, вам возможно пригодится код, который позволяет получить все картинки, из текста статьи, и вывести их.
Для того, чтобы использовать этот код, просто вставьте его в любой файл вашей темы.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?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 ) {
     // Now here you would do whatever you need to do with the images
     // For this example the images are just displayed
     for ( $i=0; $i < $iNumberOfPics ; $i++ ) {
          echo $aPics[0][$i];
     };
};
 
endwhile;
endif;
?>
Генерация автоматических смайлов

Другая функция, используемая в wordpress – позволяет автоматически заменять символы смайлов на картинку смайла.
PHP
1
2
$texte='A text with a smiley :-)';
echo str_replace(':-)','<img src="smileys/souriant.png">',$texte);
Перевод статьи “15 PHP regular expressions for web developers”, автор Jean-Baptiste Jung
3
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.10.2011, 14:31
Ответы с готовыми решениями:

PHP задача с использованием строк, регулярных выражений и символов
Дана строка состоящая из строк, разделенных символами, которые перечислены во 2 строке. Обе строки...

Что учить Веб-разработчику?
Приветствую всех. Я, начинающий веб-разработчик. Что выбрать? 1. React + Python. 2. C# (...

Книга для веб разработчику.
Какие книжки можно посчитать по созданию сайта. Мне именно надо такая без ООП и прочие.

Нужна ли (дискретная) математика веб-разработчику?
Я изучаю Ruby (соответственно RoR). Планирую и буду организовывать социальный проект с мощным соц....

5
1273 / 466 / 9
Регистрация: 20.04.2011
Сообщений: 2,012
12.10.2011, 16:38  [ТС] 2
не писать флуд
0
13208 / 6596 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
12.10.2011, 17:08 3
Vlad_AVS, При всём уважении. Что это было?

Цитата Сообщение от Vlad_AVS Посмотреть сообщение
foo
Первое foo ничего не означает?

Цитата Сообщение от Vlad_AVS Посмотреть сообщение
^foo$ «foo» встречается в строке только один раз
Строка полностью состоит из «foo». Иначе получается, что и в «lorem ipsum foo dolor» оно тоже только один раз встречается.

Цитата Сообщение от Vlad_AVS Посмотреть сообщение
[a-z] любой символ в нижнем регистре
[a-z]+ Один или более символов нижнего регистра
Маленькая латинская буква. Регистр же не у всех символов есть. И помимо латинских есть и другое буквы, которые сюда не попадут.

Цитата Сообщение от Vlad_AVS Посмотреть сообщение
[^A-Z] любой символ, не находящийся в верхнем регистре
Аналогично, «кроме большой латинской буквы».

Цитата Сообщение от Vlad_AVS Посмотреть сообщение
[0-9.-] Любая цифра, точка или знак минус
Если дефис внутри символьного класса используется для обозначения самого дефиса, то его лучше ставить в самое начало [-0-9.] и [^-0-9.] , чтобы его не нужно было экранировать. В противном случае его необходимо экранировать [0-9.\-], иначе подобная невнимательность рано или поздно обязательно приведет к образованию диапазона и, как следствие, к ненужным символам. Типичная ошибка: [A-z] не то же самое, что [A-Za-z] , ибо между «Z» и «a» есть символы «[», «\», «]», «^», «_», и «`».

Цитата Сообщение от Vlad_AVS Посмотреть сообщение
^[a-zA-Z0-9_]{1,}$ Любое слово, хотя бы одна буква, число или _
"Строка полностью представляет собой ровно одно «слово», которое состоит из таких-то символов."

Цитата Сообщение от Vlad_AVS Посмотреть сообщение
(^A-Za-z0-9) Любой символ (не число и не буква)
Строка начинается на подстроку «A-Za-z0-9».

Цитата Сообщение от Vlad_AVS Посмотреть сообщение
(gif|jpg)
([A-Z]{3}|[0-9]{4})
Таблицы на форуме палку съели.
(gif|jpg) Содержит строку «gif» или «jpg».
[A-Z]{3}|[0-9]{4} Содержит три заглавные латинские буквы вместе или четыре цифры вместе.

Цитата Сообщение от Vlad_AVS Посмотреть сообщение
PHP
1
if (preg_match('/^(http|https|ftp)://([A-Z...'
Разделитель встречается в шаблоне в незаэкранированном виде. PCRE будет ругаться на неизвестный модификатор / .

Цитата Сообщение от Vlad_AVS Посмотреть сообщение
PHP
1
$text = preg_replace("/b(regex)b/i",
PHP
1
$text = preg_replace("/s(w+s)1/i", "$1", $text);
PHP
1
if (preg_match('/^#(?:(?:[a-fd]{3}){1,2})$/i', $string)) {
PHP
1
'^((?#client IP or domain name)S+)s+(...'
PHP
1
preg_replace('B"b([^"x84x93x94rn]+)b"B', '?1?', $text);
\b, \w, \s, \d и \xHH без экранирования.

Цитата Сообщение от Vlad_AVS Посмотреть сообщение
этот пример кода ... есть отличный способ внедрить эту функцию в wordpress-блог.

...

WordPress: Использование регулярного выражения для

...

Другая функция, используемая в wordpress – позволяет автоматически заменять символы смайлов на картинку смайла.
PHP
1
echo str_replace(':-)',
А причем здесь это?

Цитата Сообщение от Vlad_AVS Посмотреть сообщение
PHP
1
preg_match_all('/(img|src)=("|')[^"'>]+/i', $data, $media);
PHP
1
preg_match_all('{<'.$tag.'[^>]*>(.*?)</'.$tag.'>.'}',
Ошибка синтаксиса PHP.

Цитата Сообщение от Vlad_AVS Посмотреть сообщение
То же самое, только для пунктуации. Попрощайтесь с двойными запятыми.
PHP
1
$text = preg_replace("/.+/i", ".", $text);
Попрощайтесь вообще со всеми повторяющимися символами. "Деревянный" -> "Деревя.ый"

Цитата Сообщение от Vlad_AVS Посмотреть сообщение
PHP
1
$titre = eregi("<title>(.*)</title>",$page,$regs);
Мне сначало показалось, что речь шла только о PCRE .
2
1273 / 466 / 9
Регистрация: 20.04.2011
Сообщений: 2,012
12.10.2011, 17:11  [ТС] 4
тут немного о том немного о другом
0
13208 / 6596 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
12.10.2011, 17:46 5
Цитата Сообщение от Vlad_AVS Посмотреть сообщение
тут немного о том немного о другом
На самом деле здесь просто копипаста в седьмом поколении (т.е. семь раз кописаста копипасты копипасты). Если Вы со всем этим знакомы, у Вас в 10 раз лучше получится написать всё это руками, плюс самообучение-закрепление.
2
13208 / 6596 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
14.10.2011, 18:08 6
Цитата Сообщение от Vovan-VE Посмотреть сообщение
Цитата Сообщение от Vlad_AVS Посмотреть сообщение
То же самое, только для пунктуации. Попрощайтесь с двойными запятыми.
PHP
1
$text = preg_replace("/.+/i", ".", $text);
Попрощайтесь вообще со всеми повторяющимися символами. "Деревянный" -> "Деревя.ый"
Что-то я наврал немного. Попрощайтесь вообще со всеми символами, кроме "\n": "foo bar\nlorem ipsum" -> ".\n."
1
14.10.2011, 18:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.10.2011, 18:08
Помогаю со студенческими работами здесь

Использование регулярных выражений в GO
Регулярные выражения(RegEx) — система обработки текста, основанная на специальной системе записи...

Синтаксис регулярных выражений
Уважаемые программисты! Такой вопрос! Есть такое выражение: $text=::replace($text,'&amp;nbsp;',...

Применение регулярных выражений
Имеется список listPet = ,] нужно анализировать числа и названия животных. Сейчас все это...

Формула регулярных выражений
Программа выводит строку string s, которая содержит текст: Файл РО№121.19 Требуется считать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru