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

PCRE
 

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

preg_split()

Синтаксис:

preg_split(pattern, string_name[, limit[, flags]])


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

3.0.9
4
5
+
+
+

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

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

Аргумент
Описание
Тип
pattern

Обязательный аргумент. Список регулярных выражений.

string
string_name

Обязательный аргумент. Строка, которая будет разделена на подстроки.

string
limit

Необязательный аргумент. Максимально возможное количество элементов в возвращаемом массиве.

Если limit равен -1, то это означает, что максимальное количество элементов не ограничено (используется когда необходим аргумент flags).

int
flags

Необязательный аргумент. Может быть комбинацией следующих значений:

PREG_SPLIT_NO_EMPTY, если этот флаг установлен, то функция preg_split вернет только непустые подстроки.

PREG_SPLIT_DELIM_CAPTURE, этот флаг указывает, что выражения в круглых скобках в списке регулярных выражений возвращаются функцией. (Флаг был добавлен в 4.0.5 версии PHP)

PREG_SPLIT_OFFSET_CAPTURE, флаг указывает смещение каждой подстроки от начала строки. Данные возвращается в виде массива в массиве. Элемент с индексом "0" каждого внутреннего массива содержит подстроку, а элемент с индексом "1" содержит смещение.

Флаги могут использоваться, как по отдельности, так и в комбинация, в этом случае они соединяются при помощи оператора "|".

 

Регулярные выражения

Отдельно следует остановится на регулярных выражениях, без представления о которых довольно трудно (если вообще возможно) разобраться с работой функции preg_split().

Достаточно хорошо описание регулярных выражений приводится на wikipedia.org

Здесь приведены только основы регулярных выражений.

[rk] - означает, что ищется либо k или r

[a-z] - осуществляется поиск строчной буквы латинского алфавита.

[0-9] - поиск любой цифры

[a-zA-Z] - поиск одной латинской буквы

[a-z]{4} - поиск любых 4 строчных букв латинского алфавита идущих друг за другом

[a-z]{2}[0-9]{2} - поиск любых 2 строчных букв латинского алфавита и любых двух цифр идущих друг за другом.

[a-z]{1,2} - поиск от 1-го до 2-х символов латинского алфавита идущих подряд.

[a-z]* - поиск любого количества символов латинского алфавита.

[a-z]{2,} - ищется не менее 2-х символов латинского алфавита

[a-сf-x] - поиск символа в двух диапазонах (a-c) и (f-x)

[-,a-z] - искомый символ может быть "-", "," или любой буквой из латинского алфавита.

[0-9]+ значок "+" означает, что должна быть как минимум 1 цифра.

[^abcd] - поиск любого символа кроме "a", "b", "c", "d"

[a-z]{4}([0-9]{3}) - найдет 4 буквы латинского алфавита и 3 цифры, которые запомнит в специальную php переменную

^[a-z]{4}[0-9]{4}$ - символы ^ и $ обозначают начало и конец строки символьного выражения.

\s - символ пробела или табуляции

\S - все видимые символы

\w - определяет символы из которых может состоять слово [a-zA-Z_]

\W - определяет символы из которых не может состоять слово [^a-zA-Z_]

\d - все цифры [0-9]

\D - все кроме цифр

. - все символы

\. - точка

\\ - одинарный слеш

ui - данные символ ставится если используются русские буквы "/[о]/ui"

i - ставится в конце регулярного выражения, если необходим поиск без учета регистра

/ /- слеши символизирует, что внутри них находится регулярное выражение "/[a-z]/", вместо слешей можно использовать и другие символы, например (~,%,*)


Примеры:

Пример 1:

В этом примере строка разбивается на подстроки по разделителю \s, обозначающему пробел или табуляцию. Символы / указывают, что \s является регулярным выражением.


$arr_str = preg_split("/\s/", "PHP very useful language");
print_r($arr_str);
?>

Результат:

Array ( [0] => PHP [1] => very [2] => useful [3] => language )

Пример 2:

В этом примере в качестве разделителя выступает пробел соединенный с буквой "U"


$arr_str = preg_split("/\s[u]/", "PHP very useful language");
print_r($arr_str);

?>

Результат:

Array ( [0] => PHP very [1] => seful language )

Пример 3:

Если в качестве разделителя используются русские буквы, то необходимо добавлять символы "ui".


$arr_str = preg_split("/П/ui", "Иванов Петр Сергеевич");
print_r($arr_str);

?>

Результат:

Array ( [0] => Иванов [1] => етр Сергеевич )

Пример 4:

В этом примере показано использование флага PREG_SPLIT_NO_EMPTY


$arr_str = preg_split("/ss/", "aassssaa",-1,PREG_SPLIT_NO_EMPTY);
print_r($arr_str);

?>

Результат:

Array ( [0] => aa [1] => aa )


$arr_str = preg_split("/ss/", "aassssaa");
print_r($arr_str);
?>

Результат:

Array ( [0] => aa [1] => [2] => aa )

Пример 5:

В этом примере показано использование флага PREG_SPLIT_OFFSET_CAPTURE


$arr_str = preg_split("/\s/", "PHP very useful language",-1, PREG_SPLIT_OFFSET_CAPTURE);
print_r($arr_str);

?>

Результат:

Array ( [0] => Array ( [0] => PHP [1] => 0 ) [1] => Array ( [0] => very [1] => 4 ) [2] => Array ( [0] => useful [1] => 9 ) [3] => Array ( [0] => language [1] => 16 ) )

 

Тест на знание функции preg_split()


1. Выберите верный вариант ответа.


$arr_str = preg_split("/\d/", "PHP5language");
print_r($arr_str);
?>

Array ( [0] => PHP5language ) Array ( [0] => PHP [1] => language ) "ничего"


2. Выберите верный вариант ответа.


$arr_str = preg_split("*\d*", "PHP5language");
print_r($arr_str);
?>

Array ( [0] => PHP5language ) Array ( [0] => PHP [1] => language ) "Ничего"


3. Выберите верный вариант ответа.


$arr_str = preg_split("/\s/", "Иванов Иван",1);
print_r($arr_str);
?>

Array ( [0] => Иванов [1] => Иван Array ( [0] => Иванов Иван)

Array ( [0] => Иванов) "Ничего"


 

 

PCRE функции

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