Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

RegExp

.pdf
Скачиваний:
9
Добавлен:
11.03.2016
Размер:
443 Кб
Скачать
☆

Возвращает массив, содержащий подстроки из subject, разделѐнного по границам совпадений с pattern.

Если limit специфицирован, то будет возвращены только подстроки до limit, а если limit равен -1, это означает "нет ограничения", что используется для специфицирования flags.

flags может быть комбинацией следующих флагов (с помощью операции |):

PREG_SPLIT_NO_EMPTY

Если это флаг установлен, только непустые участки возвращаются функцией preg_split().

PREG_SPLIT_DELIM_CAPTURE

Если это флаг установлен, выражение в скобках в патэрне ограничителя будет захвачено и возвращено. Этот флаг был введѐн в 4.0.5.

PREG_SPLIT_OFFSET_CAPTURE

Если это флаг установлен, для каждого найденного совпадения будет также возвращено смещение дополнительной строки. Заметьте, что это изменит return-значение в массиве, где каждый элемент является массивом, состоящим из совпавшей строки в смещении 0 и еѐ строкового смещения в subject - в смещении1. Этот флаг доступен, начиная с PHP 4.3.0.

Пример.

//разделить фразу по любому количеству запятых или пробельных символов,

//куда входят " ", \r, \t, \n и \f

$keywords = preg_split("/[\s,]+/", "hypertext language, programming");

mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit] )

Выполняет поиск в строке subject совпадений с шаблоном pattern и заменяет их на replacement. В случае, если параметр limit указан, будет произведена замена limit вхождений шаблона; в случае, если limit опущен либо равняется -1, будут заменены все вхождения шаблона.

Пример. Формат даты.

<?php

$string = "April 15, 2003"; $pattern = "/(\w+) (\d+), (\d+)/i"; $replacement = "\${1}1,\$3";

echo preg_replace($pattern, $replacement, $string);

?>

Результат:

April1,2003

Если во время выполнения функции были обнаружены совпадения с шаблоном, будет возвращено измененное значение subject, в противном случае будет возвращен исходный текст subject.

Первые три параметра функции preg_replace() могут быть одномерными массивами. В случае, если массив использует ключи, при обработке массива они будут взяты в том порядке, в котором они расположены в массиве. Указание ключей в массиве для pattern и replacement не является обязательным.

В случае, если параметр subject является массивом, поиск и замена по шаблону производятся для каждого из его элементов. Возвращаемый результат также будет массивом.

Регулярные выражения в веб-программировании @ prog-school.ru

10

В случае, если параметры pattern и replacement являются массивами, preg_replace() поочередно извлекает из обоих массивов по паре элементов и использует их для операции поиска и замены. Если массив replacement содержит больше элементов, чем pattern, вместо недостающих элементов для замены будут взяты пустые строки. В случае, если pattern является массивом, а replacement - строкой, по каждому элементу массива pattern будет осущесвтлен поиск и замена на pattern (шаблоном будут поочередно все элементы массива, в то время как строка замены остается фиксированной). Вариант, когда pattern является строкой, а replacement - массивом, не имеет смысла.

Регулярные выражения в веб-программировании @ prog-school.ru

11

Еще пара примеров.

Прочитайте и разберитесь с ними самостоятельно.

Пример1. Проверка доменного имени.

Имя может содержать цифры, латиницу и дефис. При этом первый и последний символ не может быть дефисом. На доменную зону накладывается ограничение от 2 до 4 символов латиницы. На полное имя – не более 63 символов.

<?php

if (strlen($domain < 64) && preg_match('/^([0-9a-z]([0-9a-z\-])*[0-9a-z]\.)+[a-z]{2,4}$/i', $domain))

{

echo ("domain OK");

}

else

{

echo ("domain wrong");

}

?>

Пример 2. Поиск XML/HTML тэгов.

function get_tag($tag, $xml)

{

$tag = preg_quote($tag); preg_match_all('{<'.$tag.'[^>]*>(.*?)</'.$tag.'>.'}',

$xml, $matches,

PREG_PATTERN_ORDER);

return $matches[1];

}

Расширенный поиск с указанием значения атрибута тега:

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

}

Пример 3. Подсветка ссылок.

Регулярные выражения в веб-программировании @ prog-school.ru

12

$text=preg_replace("#(https?|ftp)://\S+[^\s.,>)\];'\"!?]#",'<a href="\\0">\\0</a>',$text);

Регулярные выражения в веб-программировании @ prog-school.ru

13

Заключение.

Поздравляю всех тех, кто впервые услышал о регулярных выражениях. Надеюсь, Вы убедились в их необычайной гибкости и полезности, и непременно вооружитесь этим инструментом для разработки красивого, эффективного и грамотного кода своих программ!

Регулярные выражения в веб-программировании @ prog-school.ru

14

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]