用于分割字符串的函数
下面的文档是从 system.functions 系统表生成的。
alphaTokens
引入版本:v1.1
选取由 a-z 和 A-Z 范围内连续字节组成的子字符串,并返回这些子字符串构成的数组。
语法
别名: splitByAlpha
参数
s— 要拆分的字符串。Stringmax_substrings— 可选。当max_substrings > 0时,返回的子字符串数量不会超过max_substrings;否则,函数会返回尽可能多的子字符串。Int64
返回值
返回由 s 中选出的子字符串组成的数组。Array(String)
示例
用法示例
arrayStringConcat
引入自:v1.1
使用提供的分隔符连接数组中各个值的字符串表示形式。分隔符是可选参数,默认值为空字符串。
语法
参数
arr— 要拼接的数组。Array(T)separator— 可选。分隔符字符串,默认为空字符串。const String
返回值
返回拼接后的字符串。String
示例
用法示例
extractAllGroupsVertical
引入版本:v20.5
使用正则表达式匹配字符串中的所有分组,并返回一个二维数组,其中每个子数组包含来自各分组的匹配片段,按它们在输入字符串中的出现顺序进行分组。
语法
别名: extractAllGroups
参数
s— 要从中提取的输入字符串。String或FixedStringregexp— 用于匹配的正则表达式。const String或const FixedString
返回值
返回一个数组的数组,其中每个内层数组包含一次匹配中捕获到的分组。每次匹配会生成一个数组,其元素对应正则表达式中的捕获分组(分组 1、分组 2 等)。如果未找到任何匹配,则返回空数组。Array(Array(String))
示例
使用示例
ngrams
自 v21.11 引入
将 UTF-8 字符串拆分为长度为 N 的 n-grams。
语法
参数
s— 输入字符串。String或FixedStringN— n-gram 的长度。const UInt8/16/32/64
返回值
返回一个由 n-gram 组成的数组。Array(String)
示例
用法示例
reverseBySeparator
引入版本:v26.2
反转由指定分隔符分隔的字符串中的子串顺序。 该函数按分隔符拆分字符串,反转得到的各个部分的顺序, 然后使用相同的分隔符将其重新连接。对于解析域名、 文件路径或其他需要反转组件顺序的分层数据非常有用。
示例:
- reverseBySeparator('www.google.com') 返回 'com.google.www'
- reverseBySeparator('a/b/c', '/') 返回 'c/b/a'
- reverseBySeparator('x::y::z', '::') 返回 'z::y::x'
语法
参数
返回值
返回一个字符串,其子串按原始字符串从右到左的顺序排列,并使用相同的分隔符连接。String
示例
基本域名反转
路径反转
自定义分隔符
包含点号的边界情况
单个元素
空分隔符
splitByChar
引入于:v1.1
将由指定常量字符串 separator(长度恰为一个字符)分隔的字符串拆分为子字符串数组。
如果分隔符出现在字符串的开头或结尾,或存在多个连续分隔符,则可能产生空子字符串。
SETTINGS splitby_max_substrings_includes_remaining_string(默认值:0)用于控制当参数 max_substrings > 0 时,是否在结果数组的最后一个元素中包含剩余字符串。
在以下情况下可能会返回空子字符串:
- 分隔符出现在字符串的开头或结尾
- 存在多个连续分隔符
- 原始字符串
s为空
语法
参数
separator— 分隔符必须是单字节字符。Strings— 要拆分的字符串。Stringmax_substrings— 可选。如果max_substrings > 0,返回的数组最多包含max_substrings个子字符串,否则函数会返回尽可能多的子字符串。默认值为0。Int64
返回值
返回一个由所得子字符串组成的数组。Array(String)
示例
用法示例
splitByNonAlpha
引入版本:v21.9
将由空白和标点字符分隔的字符串拆分为子字符串数组。
设置项 splitby_max_substrings_includes_remaining_string(默认值:0)用于控制当参数 max_substrings > 0 时,是否将剩余字符串包含在结果数组的最后一个元素中。
语法
参数
s— 要拆分的字符串。Stringmax_substrings— 可选。当max_substrings > 0时,返回的子字符串数量不超过max_substrings;否则,函数会返回尽可能多的子字符串。默认值:0。Int64
返回值
返回一个由从 s 中选取的子字符串组成的数组。Array(String)
示例
使用示例
splitByRegexp
引入于:v21.6
将以给定正则表达式分隔的字符串拆分为子字符串数组。 如果提供的正则表达式为空,则会将字符串拆分为单个字符的数组。 如果未找到与正则表达式的匹配,字符串将不会被拆分。
在下列情况下可能会产生空子字符串:
- 在字符串开头或结尾匹配到非空正则表达式时
- 出现多个连续的非空正则表达式匹配时
- 原始字符串为空而正则表达式非空时。
通过设置 splitby_max_substrings_includes_remaining_string(默认值:0),可以控制当参数 max_substrings > 0 时,是否将剩余字符串包含在结果数组的最后一个元素中。
语法
参数
regexp— 正则表达式,常量。String或FixedStrings— 要拆分的字符串。Stringmax_substrings— 可选。当max_substrings > 0时,返回的子字符串数量不会超过max_substrings,否则函数会返回尽可能多的子字符串。默认值:0。Int64
返回值
返回由 s 中选定子字符串组成的数组。Array(String)
示例
使用示例
空正则表达式
splitByString
引入版本:v1.1
使用由多个字符组成的常量分隔符 separator 将字符串拆分为子字符串数组。
如果字符串 separator 为空,则会将字符串 s 拆分为单个字符的数组。
在以下情况下可能会产生空子字符串:
- 非空分隔符出现在字符串的开头或结尾
- 存在多个连续的非空分隔符
- 原始字符串
s为空而分隔符不为空
splitby_max_substrings_includes_remaining_string(默认值:0)控制当参数 max_substrings > 0 时,是否将剩余字符串包含在结果数组的最后一个元素中。
语法
参数
separator— 分隔符。Strings— 要拆分的字符串。Stringmax_substrings— 可选。当max_substrings > 0时,返回的子字符串数量不会超过max_substrings,否则函数会返回尽可能多的子字符串。默认值:0。Int64
返回值
返回由 s 中选定子字符串组成的数组。Array(String)
示例
用法示例
空分隔符
splitByWhitespace
引入版本:v21.9
将以空白字符分隔的字符串拆分为子字符串数组。
设置 splitby_max_substrings_includes_remaining_string(默认值:0)控制当参数 max_substrings > 0 时,结果数组的最后一个元素中是否包含剩余字符串。
语法
参数
s— 要拆分的字符串。Stringmax_substrings— 可选。当max_substrings > 0时,返回的子字符串数量不会超过max_substrings,否则函数会返回尽可能多的子字符串。默认值:0。Int64
返回值
返回由 s 中选取的子字符串组成的数组。Array(String)
示例
用法示例
tokens
引入版本:v21.11
使用指定的 tokenizer 将字符串拆分为若干 token。
可用的 tokenizer:
splitByNonAlpha使用非字母数字的 ASCII 字符来拆分字符串(另见函数 splitByNonAlpha)。splitByString(S)使用用户定义的分隔字符串S来拆分字符串(另见函数 splitByString)。可以通过可选参数指定分隔符列表,例如:tokenizer = splitByString([', ', '; ', '\n', '\\'])。注意,每个分隔字符串可以由多个字符组成(如示例中的', ')。如果未显式指定(例如tokenizer = splitByString),默认的分隔符列表是单个空格字符[' ']。ngrams(N)将字符串拆分为长度相同的N-gram(另见函数 ngrams)。ngram 的长度可以通过 1 到 8 之间的可选整数参数指定,例如:tokenizer = ngrams(3)。如果未显式指定(例如tokenizer = ngrams),默认的 ngram 长度为 3。sparseGrams(min_length, max_length, min_cutoff_length)将字符串拆分为长度在min_length到max_length(含)之间的可变长度 n-gram(另见函数 sparseGrams)。如果未显式指定,min_length和max_length的默认值分别为 3 和 100。如果提供参数min_cutoff_length,则只返回长度大于或等于min_cutoff_length的 n-gram。与ngrams(N)相比,sparseGramstokenizer 生成可变长度的 N-gram,从而可以更灵活地表示原始文本。例如,tokenizer = sparseGrams(3, 5, 4)会在内部从输入字符串生成 3、4、5-gram,但只返回 4 和 5-gram。array不进行任何 tokenization,即每行的值本身就是一个 token(另见函数 array)。
对于 splitByString tokenizer,如果这些 token 并不构成一个 前缀码,通常希望在匹配时优先选择更长的分隔符。
要做到这一点,请按照分隔符长度的降序传入它们。
例如,在 separators = ['%21', '%'] 时,字符串 %21abc 会被拆分为 ['abc'];而在 separators = ['%', '%21'] 时,则会被拆分为 ['21ac'](这很可能不是预期结果)。
语法
参数
value— 输入字符串。String或FixedStringtokenizer— 要使用的 tokenizer(分词器)。可用参数为splitByNonAlpha、ngrams、splitByString、array和sparseGrams。可选,如未显式设置,默认为splitByNonAlpha。const Stringn— 仅当参数tokenizer为ngrams时相关:可选参数,用于定义 n-gram 的长度。如未显式设置,默认为3。const UInt8separators— 仅当参数tokenizer为split时相关:可选参数,用于定义分隔符字符串。如未显式设置,默认为[' ']。const Array(String)min_length— 仅当参数tokenizer为sparseGrams时相关:可选参数,用于定义最小 gram 长度,默认为 3。const UInt8max_length— 仅当参数tokenizer为sparseGrams时相关:可选参数,用于定义最大 gram 长度,默认为 100。const UInt8min_cutoff_length— 仅当参数tokenizer为sparseGrams时相关:可选参数,用于定义最小截断长度。const UInt8
返回值
返回由输入字符串生成的 token 数组。Array
示例
默认 tokenizer
N-gram 分词器