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

Функции разбиения строк

Примечание

Приведённая ниже документация сгенерирована из системной таблицы system.functions.

alphaTokens

Добавлена в: v1.1

Выбирает подстроки из последовательностей байтов в диапазонах символов a-z и A-Z и возвращает массив выбранных подстрок.

Синтаксис

alphaTokens(s[, max_substrings])

Псевдонимы: splitByAlpha

Аргументы

  • s — Строка, которую нужно разбить. String
  • max_substrings — Необязательный параметр. Когда max_substrings > 0, количество возвращаемых подстрок не будет превышать max_substrings, в противном случае функция вернёт максимально возможное количество подстрок. Int64

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

Возвращает массив полученных подстрок строки s. Array(String)

Примеры

Пример использования

SELECT alphaTokens('abca1abc');
┌─alphaTokens('abca1abc')─┐
│ ['abca','abc']          │
└─────────────────────────┘

arrayStringConcat

Добавлено в версии: v1.1

Соединяет строковые представления значений, перечисленных в массиве, с указанным разделителем; этот параметр является необязательным и по умолчанию равен пустой строке.

Синтаксис

arrayStringConcat(arr[, separator])

Аргументы

  • arr — Массив, элементы которого нужно конкатенировать. Array(T)
  • separator — Необязательный параметр. Строка-разделитель. По умолчанию — пустая строка. const String

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

Возвращает конкатенированную строку. String

Примеры

Пример использования

SELECT arrayStringConcat(['12/05/2021', '12:50:00'], ' ') AS DateString;
┌─DateString──────────┐
│ 12/05/2021 12:50:00 │
└─────────────────────┘

extractAllGroupsVertical

Введена в версии v20.5

Находит все группы в строке с использованием регулярного выражения и возвращает массив массивов, где каждый вложенный массив содержит совпадающие фрагменты из каждой группы, упорядоченные по порядку появления во входной строке.

Синтаксис

extractAllGroupsVertical(s, regexp)

Псевдонимы: extractAllGroups

Аргументы

  • s — Входная строка, из которой выполняется извлечение. String или FixedString
  • regexp — Регулярное выражение для поиска совпадений. const String или const FixedString

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

Возвращает массив массивов, где каждый вложенный массив содержит группы, захваченные при одном совпадении. Каждое совпадение формирует массив с элементами, соответствующими группам захвата в регулярном выражении (группа 1, группа 2 и т. д.). Если совпадения не найдены, возвращается пустой массив. Array(Array(String))

Примеры

Пример использования

WITH '< Server: nginx
< Date: Tue, 22 Jan 2019 00:26:14 GMT
< Content-Type: text/html; charset=UTF-8
< Connection: keep-alive
' AS s
SELECT extractAllGroupsVertical(s, '< ([\\w\\-]+): ([^\\r\\n]+)');
[['Server','nginx'],['Date','Tue, 22 Jan 2019 00:26:14 GMT'],['Content-Type','text/html; charset=UTF-8'],['Connection','keep-alive']]

ngrams

Появилась в версии v21.11

Разбивает строку в кодировке UTF-8 на n-граммы длиной N.

Синтаксис

ngrams(s, N)

Аргументы

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

Возвращает массив n-грамм. Array(String)

Примеры

Пример использования

SELECT ngrams('ClickHouse', 3);
['Cli','lic','ick','ckH','kHo','Hou','ous','use']

reverseBySeparator

Добавлена в: v26.2

Разворачивает порядок подстрок в строке, разделённой указанным разделителем. Эта функция разделяет строку по разделителю, инвертирует порядок получившихся частей и соединяет их обратно, используя тот же разделитель. Полезна для разбора доменных имён, путей к файлам или других иерархических данных, где требуется изменить порядок компонентов.

Примеры:

  • reverseBySeparator('www.google.com') возвращает 'com.google.www'
  • reverseBySeparator('a/b/c', '/') возвращает 'c/b/a'
  • reverseBySeparator('x::y::z', '::') возвращает 'z::y::x'

Синтаксис

reverseBySeparator(string[, separator])

Аргументы

  • string — Входная строка, в которой нужно развернуть порядок её частей. String
  • separator — Строка-разделитель, используемая для определения частей. Если не указан, используется '.' (точка). По умолчанию: '.' String

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

Возвращает строку с подстроками, упорядоченными справа налево относительно исходной строки и объединёнными тем же разделителем. String

Примеры

Простой пример разворота домена

SELECT reverseBySeparator('www.google.com')
'com.google.www'

Реверс пути

SELECT reverseBySeparator('a/b/c', '/')
'c/b/a'

Произвольный разделитель

SELECT reverseBySeparator('x::y::z', '::')
'z::y::x'

Особый случай с точками

SELECT reverseBySeparator('.a.b.', '.')
'.b.a.'

Один элемент

SELECT reverseBySeparator('single')
'single'

Пустой символ-разделитель

SELECT reverseBySeparator('abcde', '')
'edcba'

splitByChar

Введена в: v1.1

Разбивает строку, в которой подстроки разделены указанной константной строкой separator длиной ровно в один символ, на массив подстрок. Пустые подстроки могут появляться, если разделитель встречается в начале или в конце строки, либо если есть несколько последовательных разделителей.

Примечание

Настройка splitby_max_substrings_includes_remaining_string (по умолчанию: 0) определяет, включается ли оставшаяся часть строки в последний элемент результирующего массива, когда аргумент max_substrings > 0.

Пустые подстроки могут появляться, когда:

  • разделитель встречается в начале или в конце строки;
  • есть несколько последовательных разделителей;
  • исходная строка s пуста.

Синтаксис

splitByChar(separator, s[, max_substrings])

Аргументы

  • separator — Разделитель должен быть однобайтовым символом. String
  • s — Строка для разбиения. String
  • max_substrings — Необязательный параметр. Если max_substrings > 0, возвращаемый массив будет содержать не более max_substrings подстрок, в противном случае функция вернёт максимально возможное количество подстрок. Значение по умолчанию — 0. Int64

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

Возвращает массив полученных подстрок. Array(String)

Примеры

Пример использования

SELECT splitByChar(',', '1,2,3,abcde');
┌─splitByChar(⋯2,3,abcde')─┐
│ ['1','2','3','abcde']    │
└──────────────────────────┘

splitByNonAlpha

Введена в версии: v21.9

Разбивает строку, разделённую пробельными символами и знаками пунктуации, на массив подстрок.

Примечание

Настройка splitby_max_substrings_includes_remaining_string (по умолчанию: 0) задаёт, будет ли оставшаяся строка включена в последний элемент результирующего массива, когда аргумент max_substrings > 0.

Синтаксис

splitByNonAlpha(s[, max_substrings])

Аргументы

  • s — строка для разбиения. String
  • max_substrings — необязательный аргумент. Если max_substrings > 0, количество возвращаемых подстрок не превышает max_substrings, иначе функция возвращает максимально возможное количество подстрок. Значение по умолчанию: 0. Int64

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

Возвращает массив подстрок, выделенных из s. Array(String)

Примеры

Пример использования

SELECT splitByNonAlpha('user@domain.com');
['user','domain','com']

splitByRegexp

Впервые представлена в: v21.6

Разбивает строку по указанному регулярному выражению на массив подстрок. Если переданное регулярное выражение пустое, строка будет разбита на массив отдельных символов. Если для регулярного выражения не найдено совпадений, строка не будет разбита.

Пустые подстроки могут появиться, когда:

  • непустое совпадение регулярного выражения находится в начале или конце строки,
  • есть несколько последовательных непустых совпадений регулярного выражения,
  • исходная строка пуста, а регулярное выражение не пустое.
Примечание

Настройка splitby_max_substrings_includes_remaining_string (по умолчанию: 0) управляет тем, будет ли оставшаяся часть строки включена в последний элемент результирующего массива, когда аргумент max_substrings > 0.

Синтаксис

splitByRegexp(regexp, s[, max_substrings])

Аргументы

  • regexp — регулярное выражение. Константа. String или FixedString
  • s — строка для разбиения. String
  • max_substrings — необязательный параметр. Если max_substrings > 0, количество возвращаемых подстрок не превышает max_substrings, в противном случае функция вернёт максимально возможное количество подстрок. Значение по умолчанию: 0. Int64

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

Возвращает массив подстрок, полученных из s. Array(String)

Примеры

Пример использования

SELECT splitByRegexp('\\d+', 'a12bc23de345f');
┌─splitByRegex⋯c23de345f')─┐
│ ['a12bc23de345f']        │
└──────────────────────────┘

Пустое регулярное выражение

SELECT splitByRegexp('', 'abcde');
┌─splitByRegexp('', 'abcde')─┐
│ ['a','b','c','d','e']      │
└────────────────────────────┘

splitByString

Впервые представлена в: v1.1

Разбивает строку с константным разделителем separator, состоящим из нескольких символов, на массив подстрок. Если строка separator пуста, строка s будет разбита на массив отдельных символов.

Пустые подстроки могут получаться в следующих случаях:

  • Непустой разделитель находится в начале или в конце строки
  • Есть несколько последовательных непустых разделителей
  • Исходная строка s пуста, а разделитель не пуст
Примечание

Параметр splitby_max_substrings_includes_remaining_string (значение по умолчанию: 0) определяет, включается ли оставшаяся часть строки в последний элемент результирующего массива, когда аргумент max_substrings > 0.

Синтаксис

splitByString(separator, s[, max_substrings])

Аргументы

  • separator — разделитель. String
  • s — строка, которую нужно разбить. String
  • max_substrings — необязательный параметр. Если max_substrings > 0, количество возвращаемых подстрок не превышает max_substrings, иначе функция вернёт максимально возможное количество подстрок. Значение по умолчанию: 0. Int64

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

Возвращает массив выбранных подстрок строки s Array(String)

Примеры

Пример использования

SELECT splitByString(', ', '1, 2 3, 4,5, abcde');
┌─splitByStrin⋯4,5, abcde')─┐
│ ['1','2 3','4,5','abcde'] │
└───────────────────────────┘

Пустой разделитель

SELECT splitByString('', 'abcde');
┌─splitByString('', 'abcde')─┐
│ ['a','b','c','d','e']      │
└────────────────────────────┘

splitByWhitespace

Введена в: v21.9

Разбивает строку, разделённую пробельными символами, на массив подстрок.

Примечание

Параметр splitby_max_substrings_includes_remaining_string (по умолчанию: 0) определяет, включается ли оставшаяся часть строки в последний элемент результирующего массива при аргументе max_substrings > 0.

Синтаксис

splitByWhitespace(s[, max_substrings])

Аргументы

  • s — Строка, которую нужно разделить. String
  • max_substrings — Необязательный параметр. Если max_substrings > 0, количество возвращаемых подстрок не превышает max_substrings, в противном случае функция вернёт максимально возможное количество подстрок. Значение по умолчанию: 0. Int64

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

Возвращает массив выбранных подстрок строки s. Array(String)

Примеры

Пример использования

SELECT splitByWhitespace('  1!  a,  b.  ');
['1!','a,','b.']

tokens

Добавлена в: v21.11

Разбивает строку на токены с использованием указанного токенайзера.

Доступные токенайзеры:

  • splitByNonAlpha разбивает строки по неалфавитно-цифровым ASCII-символам (см. также функцию splitByNonAlpha).
  • splitByString(S) разбивает строки по определённым пользовательским строкам-разделителям S (см. также функцию splitByString). Разделители можно задать с помощью необязательного параметра, например, tokenizer = splitByString([', ', '; ', '\n', '\\']). Обратите внимание, что каждая строка может состоять из нескольких символов (', ' в примере). Список разделителей по умолчанию, если он не задан явно (например, tokenizer = splitByString), — это один пробел [' '].
  • ngrams(N) разбивает строки на одинаковые по размеру N-граммы (см. также функцию ngrams). Длину n-граммы можно задать с помощью необязательного целочисленного параметра от 1 до 8, например, tokenizer = ngrams(3). Размер n-граммы по умолчанию, если он не задан явно (например, tokenizer = ngrams), равен 3.
  • sparseGrams(min_length, max_length, min_cutoff_length) разбивает строки на n-граммы переменной длины как минимум из min_length и не более чем из max_length (включительно) символов (см. также функцию sparseGrams). Если не указано явно, значения min_length и max_length по умолчанию равны 3 и 100. Если передан параметр min_cutoff_length, возвращаются только n-граммы с длиной не меньше min_cutoff_length. По сравнению с ngrams(N) токенайзер sparseGrams создаёт n-граммы переменной длины, что позволяет более гибко представлять исходный текст. Например, tokenizer = sparseGrams(3, 5, 4) внутренне формирует 3-, 4-, 5-граммы из входной строки, но возвращаются только 4- и 5-граммы.
  • array не выполняет токенизацию, то есть каждое значение в строке (элемент массива) является токеном (см. также функцию array).

В случае токенайзера splitByString, если токены не образуют префиксный код, вам, вероятно, нужно, чтобы при сопоставлении более длинные разделители имели приоритет. Для этого передавайте разделители в порядке убывания длины. Например, при separators = ['%21', '%'] строка %21abc будет токенизирована как ['abc'], тогда как при separators = ['%', '%21'] она будет токенизирована как ['21ac'] (что, вероятно, не соответствует ожидаемому результату).

Синтаксис

tokens(value) -- 'splitByNonAlpha' tokenizer
tokens(value, 'splitByNonAlpha')
tokens(value, 'splitByString'[, separators])
tokens(value, 'ngrams'[, n])
tokens(value, 'sparseGrams'[, min_length, max_length[, min_cutoff_length]])
tokens(value, 'array')

Аргументы

  • value — Входная строка. String или FixedString
  • tokenizer — Токенизатор, который будет использоваться. Допустимые аргументы: splitByNonAlpha, ngrams, splitByString, array и sparseGrams. Необязательный параметр; если явно не задан, по умолчанию используется splitByNonAlpha. const String
  • n — Используется только если аргумент tokenizer равен ngrams: необязательный параметр, определяющий длину n-грамм. Если явно не задан, по умолчанию используется значение 3. const UInt8
  • separators — Используется только если аргумент tokenizer равен split: необязательный параметр, определяющий строки-разделители. Если явно не задан, по умолчанию используется [' ']. const Array(String)
  • min_length — Используется только если аргумент tokenizer равен sparseGrams: необязательный параметр, определяющий минимальную длину граммы, по умолчанию 3. const UInt8
  • max_length — Используется только если аргумент tokenizer равен sparseGrams: необязательный параметр, определяющий максимальную длину граммы, по умолчанию 100. const UInt8
  • min_cutoff_length — Используется только если аргумент tokenizer равен sparseGrams: необязательный параметр, определяющий минимальную длину отсечения. const UInt8

Returned value

Возвращает массив токенов, полученный из входной строки. Array

Examples

Default tokenizer

SELECT tokens('test1,;\\\\ test2,;\\\\ test3,;\\\\   test4') AS tokens;
['test1','test2','test3','test4']

Токенизатор N-грамм

SELECT tokens('abc def', 'ngrams', 3) AS tokens;
['abc','bc ','c d',' de','def']