|
|
|
Функции для работы с регулярными выражениями
preg_match_all()
Синтаксис:
preg_match_all(pattern, string_name,matches[,flags[,offset]])
Поддерживается следующими версиями PHP:
Описание функции:
Функция preg_match_all ищет совпадения регулярного выражения(pattern) с данными в строке (string_name) и помещает их в массив matches. Порядок данных в массиве matches определяется флагами. В случае ошибки функция возвращает false.
Аргумент
|
Описание
|
Тип
|
pattern
|
Обязательный аргумент. Регулярное выражение (шаблон поиска)
|
string |
string_name
|
Обязательный аргумент. Строка, сравниваемая с регулярным выражением.
|
string |
matches |
Обязательный аргумент. Массив в которой помещаются все совпадения шаблона поиска со строкой. |
array |
flags |
Необязательный аргумент. Данный аргумент может принимать следующие значения
PREG_PATTERN_ORDER При установке этого флага, будет создан двухмерный массив. В $matches[0] будет помещен массив всех совпадений с шаблоном поиска, а в $matches[1] будут помещен массив всех совпадения с первой подмаской регулярного выражения. Если подмасок несколько, то для каждой из них будет создан отдельный массив. Это флаг используется по умолчанию.
PREG_SET_ORDER При установке этого флага, данные в массиве matches упорядочятся следующим образом: matches[0] будет содержать первый массив вхождений, matches[1] второй массив вхождений и так далее. matches[0,0] будет содержать полное совпадение с шаблоном поиска, а matches[0,1] первое совпадение с подмаской.
PREG_OFFSET_CAPTURE при установке этого флага дополнительно для каждого совпадения указывается смещение этого совпадения от начала строки. Флаг был добавлен в версии 4.3.
Одновременно использование флагов PREG_PATTERN_ORDER и PREG_SET_ORDER бессмысленно.
|
|
offset |
Необязательный аргумент. Аргумент offset указывает позицию в байтах с которой необходимо начать поиск. Был добавлен в версии 4.3.3
|
int |
Регулярные выражения
Отдельно следует остановится на регулярных выражениях, без представления о которых довольно трудно (если вообще возможно) разобраться с работой функции preg_match_all().
Достаточно хорошо описание регулярных выражений приводится на wikipedia.org, основные моменты применения регулярных выражений также описаны здесь.
Примеры:
Пример 1:
В этом примере выбираются все цифры помещенные в скобки.
$str = "(945)-55-34-33(02)";
$arr_str = preg_match_all("/\([0-9]+\)/", $str, $rez);
print_r ($rez);
?>
Результат:
Array ( [0] => Array ( [0] => (945) [1] => (02) ) )
|
Пример 2:
В этом примере показана работа функции с подмасками.
$str = "I1know2it3";
$arr_str = preg_match_all("/([a-zA-Z]+)([0-9])+/", $str, $rez);
print_r ($rez);
?>
Результат:
Array ( [0] => Array ( [0] => I1 [1] => know2 [2] => it3 ) [1] => Array ( [0] => I [1] => know [2] => it ) [2] => Array ( [0] => 1 [1] => 2 [2] => 3 ) )
|
Пример 3:
В этом примере показано использование флага PREG_SET_ORDER. Результат предыдущего примера будет совершенно другим.
$str = "I1know2it3";
$arr_str = preg_match_all("/([a-zA-Z]+)([0-9])+/", $str, $rez,PREG_SET_ORDER);
print_r ($rez);
?>
Результат:
Array ( [0] => Array ( [0] => I1 [1] => I [2] => 1 ) [1] => Array ( [0] => know2 [1] => know [2] => 2 ) [2] => Array ( [0] => it3 [1] => it [2] => 3 ) )
|
Пример 4:
В этом примере показано одновременное использование двух флагов (между собой они должны объединятся при помощи символа "|") и аргумента offset.
$str = "I1know2it3";
$arr_str = preg_match_all("/([a-zA-Z]+)([0-9])+/", $str, $rez,PREG_SET_ORDER | PREG_OFFSET_CAPTURE,8);
print_r ($rez);
?>
Результат:
Array ( [0] => Array ( [0] => Array ( [0] => t3 [1] => 8 ) [1] => Array ( [0] => t [1] => 8 ) [2] => Array ( [0] => 3 [1] => 9 ) ) )
|
Статьи по теме "Секреты вебмастера"
|
|
PCRE функции
|