создание и продвижение сайта (вбиваю в ТОП-10, как гвозди)Настройка и сопровождение платной рекламы яндекс.директ

PHP. Руководство по PHP. 2005

preg_match

Пред.

След.

preg_match

(PHP 3 >= 3.0.9, PHP 4, PHP 5)preg_match -- Выполняет проверку на соответствие регулярному выражению

Описание

mixed preg_match (string pattern, string subject [, array &matches [, int flags [, int offset]]])

Ищет в заданном тексте subject совпадения

с шаблоном pattern

В случае, если дополнительный параметр matches указан,

он будет заполнен результатами поиска. Элемент $matches[0] будет содержать

часть строки, соответствующую вхождению всего шаблона, $matches[1] - часть строки,

соответствующую первой подмаске, и так далее.

flags может принимать следующие значения:

PREG_OFFSET_CAPTURE

- В случае, если этот флаг указан, для каждой найденной подстроки будет указана

ее позиция в исходной строке. Необходимо помнить, что этот флаг меняет

формат возвращаемых данных: каждое вхождение возвращается в виде массива,

в нулевом элементе которого содержится найденная подстрока, а в первом - смещение.

Данный флаг доступен в PHP 4.3.0 и выше.

Дополнительный параметр flags доступен начиная с

PHP 4.3.0.

Поиск осуществляется слева направо, с начала строки. Дополнительный параметр

offset может быть использован для указания альтернативной

начальной позиции для поиска. Дополнительный параметр

offset доступен начиная с PHP 4.3.3.

Замечание:

Использование параметра offset не эквивалентно

замене сопоставляемой строки выражением substr($subject, $offset)

при вызове функции preg_match_all(), поскольку

шаблон pattern может содержать такие условия как

^, $ или (?<=x).

Сравните:

<?php

$subject = "abcdef";

$pattern = '/^def/';

preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3);

print_r($matches);

?>

Результат выполнения данного примера:

Array

(

)

В то время как этот пример

<?php

$subject = "abcdef";

$pattern = '/^def/';

preg_match($pattern, substr($subject,3), $matches, PREG_OFFSET_CAPTURE);

print_r($matches);

?>

выведет следующее:

Array

(

[0] => Array

(

[0] => def

[1] => 0

)

)

Функция preg_match() возвращает количество найденных соответствий.

Это может быть 0 (совпадения не найдены) и 1, поскольку preg_match() прекращает

свою работу после первого найденного совпадения. Если необходимо найти либо сосчитать все совпадения,

следует воспользоваться функцией preg_match_all().

Функция preg_match() возвращает FALSE в случае, если во время выполнения возникли какие-либо ошибки.

Подсказка:

Не используйте функцию preg_match(), если необходимо проверить наличие подстроки в заданной строке.

Используйте для этого strpos() либо strstr(), поскольку они

выполнят эту задачу гораздо быстрее.

Пример 1. Поиск подстроки "php" в тексте

<?php

// Символ "i" после закрывающего ограничителя шаблона означает

// регистронезависимый поиск.

if (preg_match("/php/i", "PHP is the web scripting language of choice.")){

echo "Вхождение найдено.";

} else {

echo "Вхождение не найдено.";

}

?>

Пример 2. Поиск слова "web" в тексте

<?php

/*

Специальная последовательность \b в шаблоне означает границу слова,

следовательно, только изолированное вхождение слова 'web' будет соответствовать

маске, в отличие от "webbing" или "cobweb".

*/

if (preg_match("/\bweb\b/i", "PHP is the web scripting language of choice.")){

echo "Вхождение найдено.";

} else {

echo "Вхождение не найдено.";

}

if (preg_match("/\bweb\b/i", "PHP is the website scripting language of choice.")){

echo "Вхождение найдено.";

} else {

echo "Вхождение не найдено.";

}

?>

Пример 3. Извлечение доменного имени из URL

<?php

// Извлекаем имя хоста из URL

preg_match("/^(http:\/\/)?([^\/]+)/i",

"http://php.net/index.html", $matches);

$host = $matches[2];

// извлекаем две последние части имени хоста

preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches);

echo "domain name is: {$matches[0]}\n";

?>

Результат работы примера:

domain name is: php.net

Смотрите также preg_match_all(),

preg_replace(), и

preg_split().

Пред.

Начало

След.

preg_match_all

Уровень выше

preg_quote

Отвечу на любые вопросы. С уважением, Дмитрий Владимирович.

Ваше письмо×
Free Web Hosting