Функции Язык программирования PHP

split

(PHP 3, PHP 4)

split - делает из строки массив с помощью регулярного выражения.

Описание

array split (string pattern, string string [, int limit])

Примечание: preg_split(), использующая Perl-совместимый синтаксис регулярных выражений, работает часто быстрее split().

Возвращает массив строк, каждая из которых является подстрокой строки string и образована путём разделения строки по границам, образованным патэрном pattern регулярного выражения. Если limit установлен, возвращённый массив будет содержать максимум limit элементов с последним элементом, содержащим остаток строки string. Если возникла ошибка, split() возвращает FALSE.

Для того чтобы разделить первые четыре поля строчки /etc/passwd:
Пример 1. split()
list($user,$pass,$uid,$gid,$extra)= 
split (":", $passwd_line, 5);

Примечание: если имеются n вхождений патэрна pattern, возвращённый массив будет содержать n+1 элементов. Например, если вхождений pattern нет, будет возвращён массив из одного элемента. Конечно, это также верно и в том случае, когда string пустая.

Для разбора данных, которые могут быть разграничены слэшами, точками или дефисами:
Пример 2. split()
$date 
= "04/30/1973"; // разграничителями могут быть slash, dot или hyphen list ($month, 
$day, $year) = split ('[/.-]', $date); echo "Month: $month; Day: $day; Year: $year<br>\n";

Заметьте, что pattern чувствителен к регистру.

Если вам не нужна мощь регулярных выражений, быстрее сработает explode(), которая не вызывает перегрузки машины регулярных выражений.

Для тех, кто ищет способ эмулировать Perl'овское поведение @chars = split('', $str), рекомендуем посмотреть примеры для preg_split().

Обратите, пожалуйста, внимание, что pattern это регулярное выражение. Если вы хотите разделить на любом из символов, имеющих в регулярных выражениях специальное значение, вам нужно сначала мнемонизировать/escape эти символы. Если вам кажется, что split() (или любая другая regex-функция) делает нечто странное, прочтите файл regex.7, включённый в поддиректорию regex/ дистрибутива PHP. Он имеет формат manpage, поэтому вам понадобится что-нибудь сделать со строками man /usr/local/src/regex/regex.7, чтобы прочесть его.

См. также preg_split(), spliti(), explode(), implode(), chunk_split() и wordwrap().


Назад Оглавление Вперёд
eregi Вверх spliti

Once-only/"Однократные" субпатэрны

Однократные субпатэрны не являются захватывающими субпатэрнами. Простые случаи, вроде вышеприведённого примера, можно представить как максималистское построение, которое поглощает всё, что может. Так, в то время как \d+ и \d+? подготовлены так, чтобы уточнять число цифр для совпадения с ними, чтобы совпала остальная часть патэрна, (?>\d+) может совпадать только с полной последовательностью цифр.

Эта конструкция, разумеется, может содержать произвольно усложнённые субпатэрны и может вкладываться.

Однократные субпатэрны можно использовать в сочетании с утверждениями назад для специфицирования эффективного совпадения в конце строки-субъекта. Рассмотрим такой простой патэрн:

abcd$

применённый к длинной строке, с которой он не совпадает. Поскольку совпадение выполняется слева направо, PCRE будет искать каждую "a" в субъекте, а затем посмотрит, что из последующего совпадает с остатком патэрна. Если патэрн специфицирован так:

^.*abcd$