English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
PHP Регулярные выражения (PCRE)
Функция preg_match_all используется для выполнения глобального регулярного выражения.
int preg_match_all ( string $pattern , string $subject [, array &$matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0 ]]] )
Искать все совпадения шаблона pattern, соответствующего заданному регулярному выражению, в subject и выводить их в порядке, указанном flag, в массиве matches.
После нахождения первого совпадения подfolge продолжается от последнего места совпадения.
Описание параметров:
$pattern: Текст шаблона, который нужно поискать, в виде строки.
$subject: Входная строка.
$matches: многоуровневый массив, который возвращает все результаты совпадений в качестве выходного параметра, порядок массива указывается flags.
$flags: может быть использован вместе с нижеуказанными маркерами (внимание: PREG_PATTERN_ORDER и PREG_SET_ORDER не могут использоваться одновременно):
PREG_PATTERN_ORDER: Результаты сортируются так, что $matches[0] сохраняет все совпадения полного шаблона, $matches[1] - все совпадения первой подгруппы, и так далее.
PREG_SET_ORDER: Результаты сортируются так, что $matches[0] содержит все совпадения первого поиска (включая подгруппы), $matches[1] - массив, содержащий все совпадения второго поиска (включая подгруппы), и так далее.
PREG_OFFSET_CAPTURE: Если этот маркер передается, при возврате каждого найденного совпадения добавляется его относительное смещение по отношению к целевой строке.
offset: Обычно, поиск начинается с начала целевой строки. Опциональный параметр offset используется для поиска с указанного места в целевой строке (единица измерения - байты).
Возврат полного числа совпадений (возможно, 0), или FALSE, если произошла ошибка.
<?php
$userinfo = "Name: <b>PHP</b> <br> Title: <b>Язык программирования</b>";
preg_match_all ("/<b>(.*)<\/b>/U", $userinfo, $pat_array);
print_r($pat_array[0]);
?>
Результат выполнения приведен ниже:
Массив ( [0] => <b>PHP</b> [1] => <b>Язык программирования</b> )
<?php
//\\2 является примером обратной ссылки. Это говорит pcre, что он должен соответствовать второму круглому скобкам (здесь это ([\w]+)).
//Мatching results. Два обратных слэша используются здесь, потому что здесь используются двойные кавычки.
$html = "<b>жирный текст</b><a href=howdy.html>нажмите меня</a>";
preg_match_all("/(<([\w]+)[^>]*>)(.*?)(<\/\\2>)/", $html, $matches, PREG_SET_ORDER);
foreach ($matches as $val) {
echo "п匹配到: " . $val[0] . "\n";
echo "часть 1: " . $val[1] . "\n";
echo "часть 2: " . $val[2] . "\n";
echo "часть 3: " . $val[3] . "\n";
echo "часть 4: " . $val[4] . "\n\n";
}
?>
Результат выполнения приведен ниже:
п匹配到: <b>жирный текст</b> часть 1: <b> часть 2: b часть 3: жирный текст часть 4: </b> п匹配到: <a href=howdy.html>нажмите меня</a> часть 1: <a href=howdy.html> часть 2: a часть 3: нажмите меня часть 4: </a>