REGEXFIND( ) 函数

返回一个逻辑值,指示正则表达式所指定的模式是否出现在字符串中。

语法

REGEXFIND(字符串, 模式)

参数

名称 类型 描述
字符串

字符

要测试其是否存在匹配模式的域、表达式或字面量值。
模式

字符

要搜索的模式字符串(正则表达式)。

模式可以包含字面量字符、元字符或两者的组合。字面量字符包括所有字母数字字符、某些标点符号字符和空白。

搜索区分大小写,这意味着必须明确指定大写和小写字母字符。

输出

逻辑。如果找到指定的模式值,则返回 T (真);否则,返回 F(假)。

示例

基本示例

阿尔法字符模式

对于在供应商城市域中包含 "Phoenix"、"Austin" 或 "Los Angeles" 的所有记录,返回 T。否则,返回 F:

REGEXFIND(供应商城市, "Phoenix|Austin|Los Angeles")

对于所有以 "John" 或 "Jon" 开头的姓氏,返回 T。例如:John、Jon、Johnson、Johnston、Jonson、Jonston、Jones 等。否则,返回 F:

REGEXFIND(姓氏,"^Joh?n")

仅对那些是 "John" 或 "Jon" 的姓氏返回 T。否则,返回 F:

REGEXFIND(姓氏,"^Joh?n\b")

数值字符模式

对于所有在发票编号中包含 "98" 的记录,返回 T。否则,返回 F:

REGEXFIND(发票编号, "98")

对于所有其发票编号以 "98" 开头的记录,返回 T。否则,返回 F:

REGEXFIND(发票编号, "\b98")

对于所有其发票编号以 "98" 结尾的记录,返回 T。否则,返回 F:

REGEXFIND(发票编号, "98\b")

对于所有在发票编号的第 5 个和第 6 个位置包含 "98" 的记录,返回 T。否则,返回 F:

REGEXFIND(发票编号, "\b\d\d\d\d98")
REGEXFIND(发票编号, "\b\d{4}98")

混合字符模式

对于其产品代码以 3 个数字开头,后面跟一个连字符和 6 个字母的所有记录,返回 T 。否则,返回 F:

REGEXFIND(产品代码, "\b\d{3}-[a-zA-Z]{6}\b")

对于其产品代码以 3 个或更多个数字开头,后面跟一个连字符和 6 个字母的所有记录,返回 T。否则,返回 F:

REGEXFIND(产品代码, "\b\d{3,}-[a-zA-Z]{6}")

对于所有在字母数字发票标识符的第 5 个和第 6 个位置包含 "98" 的记录,返回 T。否则,返回 F:

REGEXFIND(发票编号, "\b\w{4}98")

对于所有在发票标识符的

  • 前四个位置包含任何字符,并且
  • 在第 5 个和第 6 个位置包含 "98" 的记录,返回 T;否则,返回 F。
REGEXFIND(发票编号, "\b.{4}98")

对于所有在发票标识符中包含前面有 1 到 4 个初始字符的 "98" 的记录,返回 T。否则,返回 F:

REGEXFIND(发票编号, "\b.{1,4}98")

对于所有在发票标识符的

  • 前三个位置包含任何字符,并且
  • 在第 4 个位置包含 "5" 或 "6"、
  • 在第 5 个和第 6 个位置包含 "98" 的记录,返回 T;否则,返回 F。
REGEXFIND(发票编号, "\b.{3}[56]98")

对于所有在发票标识符的

  • 前两个位置包含任何字符,并且
  • 在第 3 个和第 4 个位置包含 "55" 或 "56"、
  • 在第 5 个和第 6 个位置包含 "98" 的记录,返回 T;否则,返回 F。
REGEXFIND(发票编号, "\b.{2}(55|56)98")

备注

工作原理

REGEXFIND( ) 函数使用正则表达式在 Analytics 中搜索数据。

正则表达式是强大且灵活的搜索字符串,它组合了字面量字符和元字符,后者是可执行各种搜索操作的特殊字符。

例如:

REGEXFIND(姓氏,"Sm(i|y)the{0,1}")

使用组 ( )、交替符 | 和数量词元字符 { } 创建一个正则表达式,以便在姓氏域中查找 "Smith"、"Smyth"、"Smithe" 或 "Smythe"。

匹配顺序执行

按顺序执行字符串模式值之间的匹配。在上面的示例中:

  • "S" 被根据姓氏域中的第一个位置进行匹配
  • "m" 被根据第二个位置进行匹配
  • "i" 和 "y" 被根据第三个位置进行匹配
  • "t" 被根据第四个位置进行匹配
  • "h" 被根据第五个位置进行匹配
  • "e" 被根据第六个位置进行匹配(如果源值中存在第六个位置的话)

何时使用 REGEXFIND( )

使用 REGEXFIND( ) 可利用简单或复杂模式匹配搜索数据。

构建正则表达式可能很复杂,尤其是当您对语法不太熟悉时。您或许能够使用 FIND( )、MATCH( ) 和 MAP( ) 等简单一些的 Analytics 搜索函数来实现您的搜索目标。

如果您的搜索要求超出了这些更简单函数的能力,则正则表达式可在构建搜索字符串方面给予您几乎无限的灵活性。

REGEXFIND( ) 如何处理空格

字符串模式中,空格(空白)均被视为字符,因此,您在处理空格时应非常小心。

模式中,您可以按照字面方式、通过键入一个空格或使用元字符 \s 来指示空格。使用元字符可使空格在模式中更易于阅读,因此被忽视的可能性较小,尤其是当您构建更复杂的模式时。

连接域

如果您想要同时在多个域中搜索,则可以在字符串中连接两个或更多个域。

例如:

REGEXFIND(供应商名称+供应商街道,"Hardware.*Main")

同时在供应商名称供应商街道域中搜索由零个或更多个字符分隔的单词 "Hardware" 和 "Main"。

在其名称中包含单词 "Hardware" 且位于名为 "Main" 的街道的企业将匹配该正则表达式。名为 "Hardware on Main" 的企业也是如此。

除非您使用 ALLTRIM( ) 函数删除空格,否则连接域被视为包括各个域中的前导空格和结尾空格的单个域。

连接域的顺序很重要

因为 REGEXFIND( ) 按照您指定的顺序搜索模式中的字符,所以,您连接域的顺序会产生影响。如果您在上面的表达式中将供应商名称供应商街道加以颠倒,则很可能不会得到任何结果。

正则表达式元字符

下表列出了您可以用于 REGEXFIND( ) 和 REGEXREPLACE( ) 的元字符,并且描述了每个元字符所执行的操作。

存在其他正则表达式语法,并且受到 Analytics 的支持,但是它更加复杂。对其他语法的完整解释超出了本指南的范围。互联网上有大量解释正则表达式的资源。

Analytics 使用正则表达式的 ECMAScript 实现。大多数的正则表达式实现使用公共内核语法。

说明

Analytics 中的当前正则表达式实现不完全支持搜索除英语以外的语言。

元字符

描述

.

匹配任何字符(换行符除外)

?

匹配前趋字面量、元字符或元素的 0 或 1 个实例

*

匹配前趋字面量、元字符或元素的 0 或 更多个实例

+

匹配前趋字面量、元字符或元素的 1 或 更多个实例

{}

匹配前趋字面量、元字符或元素的指定个数的实例您可以指定一个精确的数字、一个范围或一个开放式范围。

例如:

  • a{3} 匹配 "aaa"

  • X{0,2}L 匹配 "L"、"XL" 和 "XXL"

  • AB-\d{2,}-YZ 匹配任何具有前缀 "AB-"、后缀 "-YZ" 并且包含两个或更多个数字的字母数字标识符

[]

匹配任何位于括号内的单个字符

例如:

  • [aeiou] 匹配 a、e、i、o 和 u

  • [^aeiou] 匹配除 a、e、i、o 和 u 以外的任何字符

  • [A-G] 匹配从 A 到 G 的任何大写字母

  • [A-Ga-g] 匹配从 A 到 G 的任何大写字母,或从 a 到 g 的任何小写字母

  • [5-9] 匹配从 5 到 9 的任何数字

()

创建一个组以定义一个字符序列或字符块,它们以后可被视为单个单元。

例如:

  • S(ch)?mid?th? 匹配 "Smith" 或 "Schmidt"

  • (56A.*){2} 匹配任何在其中至少两次出现 "56A" 的字母数字标识符

  • (56A).*-.*\1 匹配任何在其中至少两次出现 "56A" 且在两者之间包含一个连字符的字母数字标识符

\

转义字符,它指定紧跟在后面的字符是字面量。如果您想要按照字面匹配元字符,请使用转义符。例如,\( 查找左括号,\\ 查找反斜杠。

如果您想要按照字面意义匹配下列任一字符,请使用转义符:

^ $ . * + ? = ! : | \ ( ) [ ] { }

其他标点符号字符,如 & 或 @ 不需要转义符。

\int

指定之前用括号 ( ) 定义的一个组重现。int 是一个整数,它标识以前定义的组相对于任何其他组的顺序位置。在 REGEXFIND( ) 和 REGEXREPLACE( ) 的模式参数中,都可以使用此元字符。

例如:

  • (123).*\1 匹配任何在其中至少两次出现 "123" 数字组的标识符

  • ^(\d{3}).*\1 匹配任何在其中重复出现前 3 个数字的标识符

  • ^(\d{3}).*\1.*\1 匹配任何在其中至少两次重复出现前 3 个数字的标识符

  • ^(\D)(\d)-.*\2\1 匹配任何在其中重复出现字母数字前缀且字母字符和数字字符颠倒位置的标识符

$int

指定在替换字符串中使用在目标字符串中找到的一个组。int 是一个整数,它标识目标字符串中的组相对于任何其他组的顺序位置。此元字符只能用在 REGEXREPLACE( ) 中的新字符串参数中

例如:

  • 如果模式 (\d{3})[ -]?(\d{3})[ -]?(\d{4}) 用于匹配各种不同的电话号码格式,则新字符串 ($1)-$2-$3 可用于将数字替换为它们自身,并且标准化格式。999 123-4567 和 9991234567 都变成 (999)-123-4567。

|

匹配管道 (|) 前后的字符、字符块或表达式

例如:

  • a|b 匹配 a 或 b

  • abc|def 匹配 "abc" 或 "def"

  • Sm(i|y)th 匹配 Smith 或 Smyth

  • [a-c]|[Q-S]|[x-z] 匹配下列任一字母:a、b、c、Q、R、S、x、y、z

  • \s|- 匹配一个空格或连字符

\w

匹配任何单词字符(a 到 z、A 到 Z、0 到 9 和下划线字符 _)

\W

匹配任何非单词字符(除 a 到 z、A 到 Z、0 到 9 和下划线字符 _ 以外的字符)

\d

匹配任何数字(任何十进制数字)

\D

匹配任何非数字(任何不是十进制数字的字符)

\s

匹配空格(空白)

\S

匹配任何非空格(非空白字符)

\b

匹配单词边界(在 \w 和 \W 字符之间)

单词边界本身不包含空格。例如:

  • "United Equipment" 包含 4 个单词边界 – 空格的两侧各有一个,字符串的开头有一个,结尾有一个。"United Equipment" 被正则表达式 \b\w*\b\W\b\w*\b 匹配

提示

除了空格以外,逗号、句号和其他非单词字符也可以充当单词边界。

例如,以下表达式的求值结果为“真”:

REGEXFIND("jsmith@example.net", "\bexample\b")

^

匹配字符串的开头

在括号 [ ] 内,^ 否定内容

$

匹配字符串的结尾

相关函数

如果您想要查找和替换匹配模式,请使用REGEXREPLACE( ) 函数

ACL 脚本指南 14.1