Перейти к содержимому
Последнее обновление

SPLIT_BY_REGEXP/REGEXP_SPLIT_TO_ARRAY

Описание​

Функция SPLIT_BY_REGEXP разбивает строку на массив строк по заданному шаблону регулярного выражения. В отличие от SPLIT_BY_STRING, эта функция поддерживает сопоставление со сложными регулярными выражениями, позволяя гибко задавать правила разбиения. При необходимости можно ограничить максимальное количество разбиений, что полезно при обработке структурированного текста, очистке данных и сопоставлении с шаблоном.

Синтаксис​

SPLIT_BY_REGEXP(<str>, <pattern> [, <max_limit>])

Параметры​

ПараметрОписание
<str>Исходная строка для разбиения. Тип: VARCHAR
<pattern>Шаблон регулярного выражения, используемый в качестве разделителя. Тип: VARCHAR
<max_limit>Необязательный параметр, ограничивающий максимальное количество элементов в возвращаемом массиве. Тип: INT

Возвращаемое значение​

Возвращает значение типа ARRAY, представляющее собой массив строк, полученный разбиением по регулярному выражению.

Правила разбиения:

  • Точки разбиения определяются по совпадениям с шаблоном регулярного выражения
  • Поддерживается стандартный синтаксис регулярных выражений
  • Если шаблон представляет собой пустую строку, строка разбивается на отдельные символы
  • Если совпадений с шаблоном нет, возвращается массив из одного элемента, содержащего исходную строку
  • max_limit ограничивает максимальную длину результирующего массива

Особые случаи:

  • Если любой из параметров равен NULL, возвращается NULL
  • Если строка пуста, возвращается массив из одного элемента, содержащего пустую строку
  • Если регулярное выражение представляет собой пустую строку, выполняется разбиение по символам
  • Если max_limit равен 0 или отрицателен, ограничение не применяется
  • Последовательные совпадения создают элементы с пустыми строками

Примеры​

  1. Разбиение по символам с пустым шаблоном
SELECT SPLIT_BY_REGEXP('abcde', '');
+------------------------------+
| SPLIT_BY_REGEXP('abcde', '') |
+------------------------------+
| ["a", "b", "c", "d", "e"] |
+------------------------------+
  1. Разбиение по шаблону из цифр
SELECT SPLIT_BY_REGEXP('a12bc23de345f', '\\d+');
+-----------------------------------------+
| SPLIT_BY_REGEXP('a12bc23de345f', '\d+') |
+-----------------------------------------+
| ["a", "bc", "de", "f"] |
+-----------------------------------------+
  1. Обработка значений NULL
SELECT SPLIT_BY_REGEXP(NULL, '\\d+'), SPLIT_BY_REGEXP('test', NULL);
+--------------------------------+--------------------------------+
| SPLIT_BY_REGEXP(NULL, '\d+') | SPLIT_BY_REGEXP('test', NULL) |
+--------------------------------+--------------------------------+
| NULL | NULL |
+--------------------------------+--------------------------------+
  1. Обработка пустой строки
SELECT SPLIT_BY_REGEXP('', ','), SPLIT_BY_REGEXP('hello', 'xyz');
+---------------------------+-------------------------------+
| SPLIT_BY_REGEXP('', ',') | SPLIT_BY_REGEXP('hello', 'xyz') |
+---------------------------+-------------------------------+
| [""] | ["hello"] |
+---------------------------+-------------------------------+
  1. Использование параметра максимального количества элементов
SELECT SPLIT_BY_REGEXP('a,b,c,d,e', ',', 3), SPLIT_BY_REGEXP('1-2-3-4-5', '-', 2);
+--------------------------------------+--------------------------------------+
| SPLIT_BY_REGEXP('a,b,c,d,e', ',', 3) | SPLIT_BY_REGEXP('1-2-3-4-5', '-', 2) |
+--------------------------------------+--------------------------------------+
| ["a", "b", "c,d,e"] | ["1", "2-3-4-5"] |
+--------------------------------------+--------------------------------------+
  1. Шаблон для пробельных символов
SELECT SPLIT_BY_REGEXP('hello world  test', '\\s+'), SPLIT_BY_REGEXP('a\tb\nc\rd', '\\s');
+------------------------------------------+------------------------------------+
| SPLIT_BY_REGEXP('hello world test', '\s+') | SPLIT_BY_REGEXP('a\tb\nc\rd', '\s') |
+------------------------------------------+------------------------------------+
| ["hello", "world", "test"] | ["a", "b", "c", "d"] |
+------------------------------------------+------------------------------------+
  1. Специальные символы и экранирование
SELECT SPLIT_BY_REGEXP('a.b.c.d', '\\.'), SPLIT_BY_REGEXP('x(y)z[w]', '[\\(\\)\\[\\]]');
+----------------------------------+--------------------------------------------+
| SPLIT_BY_REGEXP('a.b.c.d', '\.') | SPLIT_BY_REGEXP('x(y)z[w]', '[\(\)\[\]]') |
+----------------------------------+--------------------------------------------+
| ["a", "b", "c", "d"] | ["x", "y", "z", "w"] |
+----------------------------------+--------------------------------------------+
  1. Границы слов и сложные шаблоны
SELECT SPLIT_BY_REGEXP('TheQuickBrownFox', '[A-Z]'), SPLIT_BY_REGEXP('user@example.com', '@|\\.');
+------------------------------------------+-------------------------------------------+
| SPLIT_BY_REGEXP('TheQuickBrownFox', '[A-Z]') | SPLIT_BY_REGEXP('user@example.com', '@|\.') |
+------------------------------------------+-------------------------------------------+
| ["", "he", "uick", "rown", "ox"] | ["user", "example", "com"] |
+------------------------------------------+-------------------------------------------+
  1. Многобайтовые символы UTF-8
SELECT SPLIT_BY_REGEXP('ṭṛì→ḍḍumai→hello', '→'), SPLIT_BY_REGEXP('αβγδε', '[βδ]');
+------------------------------------------+----------------------------------+
| SPLIT_BY_REGEXP('ṭṛì→ḍḍumai→hello', '→') | SPLIT_BY_REGEXP('αβγδε', '[βδ]') |
+------------------------------------------+----------------------------------+
| ["ṭṛì", "ḍḍumai", "hello"] | ["α", "γ", "ε"] |
+------------------------------------------+----------------------------------+
  1. Последовательные совпадения и пустые элементы
SELECT SPLIT_BY_REGEXP('a,,b,c', ','), SPLIT_BY_REGEXP('123abc456def', '[a-z]+');
+-------------------------------+---------------------------------------+
| SPLIT_BY_REGEXP('a,,b,c', ',') | SPLIT_BY_REGEXP('123abc456def', '[a-z]+') |
+-------------------------------+---------------------------------------+
| ["a", "", "b", "c"] | ["123", "456", ""] |
+-------------------------------+---------------------------------------+

Ключевые слова​

SPLIT_BY_REGEXP, SPLIT, REGEXP, REGEXP_SPLIT_TO_ARRAY