English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

PHP базовый курс

PHP продвинутый курс

PHP и MySQL

PHP справочник

PHP функция preg_match() использование и пример

PHP регулярные выражения (PCRE)

Функция preg_match используется для выполнения поиска совпадения регулярным выражением.

Синтаксис

int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )

Поиск совпадения между subject и шаблоном, указанным регулярным выражением.

Описание параметров:

  • $pattern: Шаблон для поиска, представленный в виде строки.

  • $subject: Входная строка.

  • $matches: Если предоставлен параметр matches, он будет заполнен результатами поиска. $matches[0] будет содержать полную совпадающую строку шаблона, $matches[1] будет содержать текст совпадения первого захваченного подгруппы и т.д.

  • $flags: flags может быть установлен на следующие значения:

  • PREG_OFFSET_CAPTURE: Если передан этот флаг, для каждого出现的 совпадения будет добавлен строковый сдвиг (относительно целевой строки). Замечание: это изменяет массив, заполненный в параметре matches, делая каждый элемент массивом, в котором 0-й элемент - это совпадающая строка, а 1-й элемент - это сдвиг совпадающей строки в целевой строке subject.

  • offset: Обычно, поиск начинается с начала целевой строки. Опциональный параметр offset используется для указания начала поиска от некоторого не известного начала целевой строки (единицей измерения является байт).

Возвратное значение

Возвращает количество совпадений шаблона. Значение будет 0 раз (несовпадение) или 1 раз, так как preg_match() останавливается после первого совпадения. preg_match_all() работает по-другому, он продолжает искать subject до конца. Если происходит ошибка, preg_match() возвращает FALSE.

Онлайн пример

<?php
//Знак разделителя после шаблона "i" означает, что это поиск без учета регистра
if (preg_match("/php/i", "PHP is the web scripting language of choice.")) {
    echo "Найдена совпадающая строка php.";
} else {
    echo "Не найдена совпадающая строка php.";
}
?>

Результат выполнения показан ниже:

Найдена совпадающая строка php。

<?php
/* В модели \b обозначает границу слова, поэтому будет совпадать только независимое слово "web", а не совпадение
 * Часть слова, например "webbing" или "cobweb" */
if (preg_match("/\bweb\b/i", "PHP is the web scripting language of choice.")) {
    echo "Найдены соответствующие строки.\n";
} else {
    echo "Не найдены соответствующие строки.\n";
}
if (preg_match("/\bweb\b/i", "PHP is the website scripting language of choice.")) {
    echo "Найдены соответствующие строки.\n";
} else {
    echo "Не найдены соответствующие строки.\n";
}
?>

Результат выполнения показан ниже:

Найдены соответствующие строки.
Не найдены соответствующие строки.

<?php
// Получить имя хоста из URL
preg_match('@^(?:http://)?([^/]+)@i',
    "http://ru.oldtoolbag.com/index.html", $matches);
$host = $matches[1];
// Получить последние две части имени хоста
preg_match('/[^.]+\.[^.]+$/', $host, $matches);
echo "Имя домена: {$matches[0]}\n";
?>

Результат выполнения показан ниже:

Имя домена: oldtoolbag.com

<?php
$str = 'foobar: 2008';
preg_match('/(?P<name>\w+): (?P<digit>\d+)/', $str, $matches);
/* Примеры работы с php 5.2.2 (pcre 7.0) и更新的 версиями, но для обратной совместимости рекомендуется использовать上面的 способ. */
// preg_match('/(?<name>\w+): (?<digit>\d+)/', $str, $matches);
print_r($matches);
?>

Результат выполнения показан ниже:

Массив
(
    [0] => foobar: 2008
    [имя] => foobar
    [1] => foobar
    [число] => 2008
    [2] => 2008
)

PHP регулярные выражения (PCRE)