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). Сравните:

$subject = "abcdef";
$pattern = '/^def/';
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3);
print_r($matches);

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

Array ( )

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

$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(), поскольку они выполнят эту задачу гораздо быстрее.

Проверить работу функции preg_match:



Пример 1. Поиск подстроки "php" в тексте
// Символ "i" после закрывающего ограничителя шаблона означает
// регистронезависимый поиск.
if (preg_match("/php/i", "PHP is the web scripting language of choice.")) {
 echo "Вхождение найдено.";
} else {
 echo "Вхождение не найдено.";
}

Пример 2. Поиск слова "web" в тексте
/*
 Специальная последовательность \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
// Извлекаем имя хоста из URL
preg_match("/^(http:\/\/)?([^\/]+)/i",
 "http://www.htmlweb.ru/index.html", $matches);
$host = $matches[2];

// извлекаем две последние части имени хоста
preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches);
echo "domain name is: {$matches[0]}\n";

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

domain name is: htmlweb.ru

Смотрите также preg_match_all(), preg_replace(), preg_split(), регулярные выражения на PHP, примеры использования регулярных выражений на php.

Регулярные выражения в PHP.
Примеры регулярных выражения в PHP.
Все функции регулярные выражения
Описание на ru2.php.net
Описание на php.ru