Давно хотел разобраться с регулярными выражениями. Хотя «разобраться» — громко сказано. Чтобы постичь великое искусство и стать повелителем регулярных выражений, нужно постоянно с ними иметь дело. Мало изучить синтаксис, спецсимволы и модификаторы, — нужно уметь ими пользоваться. А умение пользоваться приходит с опытом.
В данном посте буду выкладывать примеры использования регулярных выражений, в работе которых разобрался сам.
Таблица спецсимволов
Спецсимвол | Описание |
---|---|
\ | Символ экранирования. Пример: ‘/seo\/smo/’ — соответствует строке, в которой есть seo/smo. |
^ | Символ начала данных. Пример: ‘/^seo/’ — соответствует строке, которая начинается словом seo. |
$ | Символ конца данных. Пример: ‘/блог$/’ — соответствует строке, которая заканчивается словом блог. |
. | Любой символ, кроме перевода строки. Пример: ‘/seo.ult/’ — соответствует строке seopult, seo9ult, seo@ult и т.д. |
[] | Внутри этих скобок перечисляются символы, любой из которых может стоять на данном месте, но только один. Пример: ‘/seo[pkm]ult/’ — под соответствие попадут только строки, содержащие seopult, seokult или seomult. |
| | Или. Пример ниже. |
() | Подмаска. |
? | Одно или ноль вхождений предшествующего символа или подмаски. |
* | Любое количество вхождений предшествующего символа или подмаски. В том числе и ноль. |
+ | Одно или более вхождений. |
Пример: ‘/se+(op|om)?.*t/’ — буква s, затем одна или несколько букв e, после этого сочетание op или om может встречаться один раз, а может и ни разу, потом любое количество любых символов и буква t. | |
{a,b} | Количество вхождений предшествующего символа или подмаски от a до b. Пример: {0,} — то же самое, что *, {0,1} — то же, что ?, {3,5} — 3, 4 или 5 повторений. |
Простые примеры php скриптов с использованием регулярных выражений:
1) Предыдущие и последующие выражения.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <!--?php // найти слово в котором после Box идёт ing. Если слово найдено, функция вернёт true, если нет - false. $pattern1 = '/Box(?=ing)/'; preg_match($pattern1,'Box Day'); // false preg_match($pattern1,'Boxing Day'); // true // найти слово в котором после box не идёт ing. Если слово найдено, функция вернёт true, если нет - false. $pattern2 = '/box(?!ing)/'; preg_match($pattern2,'Box for iPhone and iPad'); // true preg_match($pattern2,'What is boxing day?'); // false preg_match($pattern2,'css-moz-box-shadow'); // true // найти слово в котором перед ing не идёт box. Если слово найдено, функция вернёт true, если нет - false. $pattern3 = '/(?<!box)ing/'; preg_match($pattern3,'contesting a ticket'); // true preg_match($pattern3,'What is boxing day?'); // false ?--> |
2) Заменить определенную ссылку в тексте.
1 2 3 4 5 | <!--?php $text = 'Посетив <a href="https://seogrot.com/"-->Seo блог я узнал для себя много нового.'; $text=preg_replace("~<a href="\"http://seogrot\.com/\"">[^<]+?</a>~",'seo блог',$text); echo $text; ?> |
3) Получить и вывести значение Alexa Rank заданного сайта.
1 2 3 4 5 6 7 8 9 10 | <!--?php $url='https://seogrot.com/'; function alexa($url) { preg_match('# <div class="data .+?"-->(.*?)#si', file_get_contents("http://www.alexa.com/siteinfo/{$url}"), $a); return trim(str_replace(",","",strip_tags($a[1]))); } $alexa = alexa($url); echo $alexa; ?> |
4) Получить и вывести title страницы.
1 2 3 4 5 | <!--?php $str = file_get_contents('http://moz.com/blog'); preg_match('/<title-->(.*)<\/title>/s', $str, $m); echo $m[1]; ?> |
5) Получить и вывести внешние ссылки.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | <!--?php function getoutlinks($content, $domain) { $content = preg_replace("/[\n\r\t]/", '', $content); // замена символов перевода строки и табуляции на пробел $content = preg_replace("/[ ]{2,}/", ' ', $content); // замена более 2х пробелов на один preg_match_all("/<a[^<-->]*href=(?:'|\")(.*)(?:'|\")[^<>]*>(.*)<\/a>/iU", $content, $links); // сбор ссылок if (sizeof($links[1]) > 0) // если ссылки найдены { $out = array(); // массив внешних ссылок foreach ($links[1] as $v) { if (preg_match("/http:\/\/(www\.){0,1}".$domain."/i", $v)) // отсеиваем внутренние ссылки { continue; } if (preg_match("/(http:|https:)?\/\/(www\.){0,1}(.*)/i", $v)) // внешняя ссылка { $out[] = $v; } } return $out; } return array(); } $domain = 'seogrot.com'; $content = file_get_contents('https://seogrot.com/'); $getoutlinks = getoutlinks($content, $domain); for ($i = 0; $i <= count($getoutlinks); $i++) { echo $getoutlinks[$i]." "; } ?> |
где:
preg_replace — выполняет поиск и замену по регулярному выражению.
preg_match — выполняет проверку на соответствие регулярному выражению.
preg_match_all — отыскивает все совпадения, в то время как preg_match — только первое.
file_get_contents — получить содержимое файла в виде одной строки.
trim — удаляет пробелы в начале и конце строки.
str_replace — заменяет строку поиска на строку замены.
strip_tags — удаляет html и php тэги из строки.
sizeof — получает количество элементов в переменной.
count — подсчитывает количество элементов массива или количество свойств объекта.
Добавить комментарий