RegExp
.pdf
Возвращает массив, содержащий подстроки из 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 |
