Preg split: примеры (PHP)
preg_split(string $pattern, string $subject, int $limit = -1, int $flags = 0): array|falseФункция preg_split выполняет разделение строки по регулярному выражению. Использование функции актуально при необходимости разбить строку по сложному шаблону, который невозможно обработать простыми функциями вроде explode.
Аргументы функции:
- pattern (string) - регулярное выражение для поиска разделителей
- subject (string) - входная строка для обработки
- limit (int) - ограничивает количество элементов в результате. При отрицательном значении ограничение не учитывается. Значение -1 или 0 означает отсутствие ограничений
- flags (int) - комбинация констант: PREG_SPLIT_NO_EMPTY (исключает пустые строки), PREG_SPLIT_DELIM_CAPTURE (включает захваченные подвыражения), PREG_SPLIT_OFFSET_CAPTURE (добавляет смещение каждого вхождения)
$str = "яблоко,груша,вишня,слива";
$result = preg_split("/,/", $str);
print_r($result);Array
(
[0] => яблоко
[1] => груша
[2] => вишня
[3] => слива
)$str = "кофе,,чай,,";
$result = preg_split("/,/", $str, -1, PREG_SPLIT_NO_EMPTY);
print_r($result);Array
(
[0] => кофе
[1] => чай
)$str = "один два три четыре пять";
$result = preg_split("/\s+/", $str, 3);
print_r($result);Array
(
[0] => один
[1] => два
[2] => три четыре пять
)explode() - разделяет строку по фиксированной подстроке. Работает значительно быстрее при простых разделителях.
str_split() - разбивает строку на части заданной длины. Подходит для обработки строк с фиксированной шириной полей.
token_get_all() - разбивает PHP-код на лексемы. Специализированная функция для анализа кода.
Выбор между preg_split и explode зависит от сложности разделителя. Для простых символов-разделителей explode предпочтительнее из-за скорости работы.
$result = preg_split("/[/", "текст");
var_dump($result);Warning: preg_split(): Compilation failed: missing terminating ]...
$str = "apple.price|banana.price";
$result = preg_split("/|/", $str);
print_r($result);Array
(
[0] => a
[1] => p
[2] => p
... каждый символ как отдельный элемент
)$str = "мама,,мыла,,раму";
$result = preg_split("/,/", $str);
print_r($result);Array
(
[0] => мама
[1] =>
[2] => мыла
[3] =>
[4] => раму
)В PHP 8.0 функция preg split выбрасывает исключение ValueError при передаче некорректного значения параметра limit (null или нечисловое значение). Ранее такие случаи обрабатывались как limit = -1.
// PHP 8+
try {
preg_split('/,/', 'a,b,c', null);
} catch (ValueError $e) {
echo $e->getMessage();
}preg_split(): Argument #3 ($limit) must be of type int
В PHP 7.3 добавлена поддержка escape-последовательности \K в регулярных выражениях, что влияет на поведение разделения.
$data = "Иванов И.И.: 25 лет, Петров П.П.: 30 лет";
$result = preg_split("/\s*[:,]\s*/", $data);
print_r($result);Array
(
[0] => Иванов И.И.
[1] => 25 лет
[2] => Петров П.П.
[3] => 30 лет
)$str = "10+20-30*40";
$result = preg_split("/([+\-*\/])/", $str, -1, PREG_SPLIT_DELIM_CAPTURE);
print_r($result);Array
(
[0] => 10
[1] => +
[2] => 20
[3] => -
[4] => 30
[5] => *
[6] => 40
)$str = "first second third";
$result = preg_split("/\s+/", $str, -1, PREG_SPLIT_OFFSET_CAPTURE);
print_r($result);Array
(
[0] => Array
(
[0] => first
[1] => 0
)
[1] => Array
(
[0] => second
[1] => 6
)
)$text = "Строка 1\n\nСтрока 2\n\n\nСтрока 3";
$result = preg_split("/\n+/", $text, -1, PREG_SPLIT_NO_EMPTY);
print_r($result);Array
(
[0] => Строка 1
[1] => Строка 2
[2] => Строка 3
)Preg split в Python
import re
str = "яблоко,груша,вишня"
result = re.split(r',', str)
print(result)['яблоко', 'груша', 'вишня']
Preg split в Javascript
let str = "яблоко,груша,вишня";
let result = str.split(/,/);
console.log(result);['яблоко', 'груша', 'вишня']
Preg split в MySQL
SELECT
REGEXP_SUBSTR('яблоко,груша,вишня', '[^,]+', 1, 1) AS item1,
REGEXP_SUBSTR('яблоко,груша,вишня', '[^,]+', 1, 2) AS item2;item1: яблоко item2: груша
Основное отличие в PHP - поддержка флагов, изменяющих поведение функции, и интеграция с экосистемой PCRE.