extract_all()

从源字符串中获取正则表达式的所有匹配项。 还可以检索匹配组的子集。

print extract_all(@"(\d+)", "a set of numbers: 123, 567 and 789") // results with the dynamic array ["123", "567", "789"]

弃用的别名:extractall()

语法

extract_all(regex, [captureGroups,] source)

详细了解语法约定

参数

客户 类型​​ 必需 说明
regex string 一个正则表达式,包含 1 到 16 个捕获组。
captureGroups dynamic 一个数组,指示要提取的捕获组。 有效值为 1 到正则表达式中的捕获组数量。 还允许使用命名捕获组。 请参阅示例
source string 要搜索的字符串。

返回

  • 如果 regex 在 source 中找到匹配项,则:返回一个动态数组,其中包括针对所指示的捕获组 captureGroups 或 regex 中的所有捕获组的所有匹配项 。
  • 如果 captureGroups 的数目为 1,则:返回的数组有一维的匹配值。
  • 如果 captureGroups 的数目大于 1,则:返回的数组是一个二维集合,其中包含针对 captureGroups 选择或 regex 中出现的所有捕获组(如果省略 captureGroups)的多值匹配项。
  • 如果没有匹配项,则返回:null

示例

提取单个捕获组

以下查询返回 GUID 的十六进制字节表示形式(两个十六进制数字)。

print Id="82b8be2d-dfa7-4bd1-8f63-24ad26d31449"
| extend guid_bytes = extract_all(@"([\da-f]{2})", Id) 

输出

ID guid_bytes
82b8be2d-dfa7-4bd1-8f63-24ad26d31449 ["82","b8","be","2d","df","a7","4b","d1","8f","63","24","ad","26","d3","14","49"]

提取多个捕获组

以下查询使用带有三个捕获组的正则表达式,将每个 GUID 部分拆分为第一个字母、最后一个字母以及中间部分。

print Id="82b8be2d-dfa7-4bd1-8f63-24ad26d31449"
| extend guid_bytes = extract_all(@"(\w)(\w+)(\w)", Id)

输出

ID guid_bytes
82b8be2d-dfa7-4bd1-8f63-24ad26d31449 [["8","2b8be2","d"],["d","fa","7"],["4","bd","1"],["8","f6","3"],["2","4ad26d3144","9"]]

提取捕获组的子集

以下查询选择捕获组的一个子集。

正则表达式匹配第一个字母、最后一个字母以及所有剩余部分。

captureGroups 参数仅用于选择第一个和最后一个部分。

print Id="82b8be2d-dfa7-4bd1-8f63-24ad26d31449"
| extend guid_bytes = extract_all(@"(\w)(\w+)(\w)", dynamic([1,3]), Id) 

输出

ID guid_bytes
82b8be2d-dfa7-4bd1-8f63-24ad26d31449 [["8","d"],["d","7"],["4","1"],["8","3"],["2","9"]]

使用命名捕获组

以下查询中的 captureGroups 使用捕获组索引和命名捕获组引用来提取匹配值。

print Id="82b8be2d-dfa7-4bd1-8f63-24ad26d31449"
| extend guid_bytes = extract_all(@"(?P<first>\w)(?P<middle>\w+)(?P<last>\w)", dynamic(['first',2,'last']), Id) 

输出

ID guid_bytes
82b8be2d-dfa7-4bd1-8f63-24ad26d31449 [["8","2b8be2","d"],["d","fa","7"],["4","bd","1"],["8","f6","3"],["2","4ad26d3144","9"]]