Руководство по языку программирования PHP
 

PCRE
 

Функции для работы с регулярными выражениями

preg_match_all()

Синтаксис:

preg_match_all(pattern, string_name,matches[,flags[,offset]])


Поддерживается следующими версиями PHP:

3.0.9
4
5
+
+
+

Описание функции:

Функция 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 функции

preg_grep()
preg_filter()
preg_last_error()
preg_match()
preg_match_all()
preg_quote()
preg_replace()
preg_replace_callback()
preg_split()