正则表达式

上次更新: 2022-10-05
  • 创建对象:
  • User
    Admin
重要

阅读有关Data Workbench 生命周期终止公告.

正则表达式可以在 Data Workbench 所有搜索字段中使用,包括查询实体面板。

关于正则表达式

正则表达式是一种文本模式,它由字母数字字符和称为元字符的特殊字符组合而成,可用于从文本中查找模式并从中提取子字符串。正则表达式广泛用于计算机编程,它是 Perl 之类的语言所必不可少的一部分。

为了识别并提取复杂的字符串模式,Data Workbench Server 会在某些转换和条件中使用正则表达式。以下是有关正则表达式的简要指南。

本附录并未对正则表达式进行全面介绍。这里特别推荐 O'Reilly 出版的《精通正则表达式(第 2 版)》**(由 Jeffrey E. F. Friedl 编写)作为参考。

正则表达式术语

术语 定义
文本 文本是正则表达式中用来查找特定字符序列的字符。例如,若要在 shop/products.html 中查找“product”,则字符串“product”便是文本,或我们以文本形式在字符串中查找的内容。
元字符 元字符是一种特殊字符,它在正则表达式的上下文中具有唯一的解释。例如,句点 (.) 就是一个用于匹配任意字符的元字符。
转义序列 转义序列只是一种方式,用于告诉正则表达式引擎我们要使用一个元字符作为文本。转义序列始终以反斜杠字符(\)。 通过将反斜杠(它也是一个元字符)放置在某个元字符的前面,正则表达式引擎便会将转义的元字符解释为文本。例如,如果要匹配元字符句点(.),则需要使用转义序列。 但是,要匹配字符串168.196.0.11中的某个句点,您可以使用包含反斜杠和句点(\.)。
模式 这是正则表达式的简化术语。从本质上讲,正则表达式就是一种尝试匹配目标字符串的模式。
目标字符串 此术语是指我们要在其中搜索以查找所需模式的字符串。

关于文本匹配

文本匹配采用没有任何转义字符的文本字符串,并在目标字符串中查看它是否为目标字符串的子字符串。

在此示例中,您会了解文本匹配的使用方式。假定数据是从网站流量中收集的,并且 cs(referrer) 字段包含以下值:

https://www.abc.com/adventurenews/today.html?ad=123AZ45

若要确定反向链接是否表示某个广告的单击者,您需要查看反向链接是否包含字符串“ad”。您可以只使用文本字符串“ad”来搜索目标字符串,并确定广告是否用于将流量路由到网站。虽然这会匹配目标字符串,但它会在两个位置匹配,从而产生歧义并可能导致误报。

以下 URL 在两个不同的位置都包含字符串“ad”:

https://www.abc.com/ad vertnews/today.html?ad =123AZ45

因此,如果您尝试确定哪些会话是由于特定广告营销活动而启动的,则只将文本 ad 作为正则表达式显然是不够的。将文本更改为“ad=”会消除这一歧义,并使表达式只进行一次匹配。但是,即使这样也不足以确保反向链接就是广告营销活动的一部分。请仔细研究以下反向链接:

https://www.xyz.com/hello.html?pad=something

您完全无法控制他人可能用来创建网站链接的 URL。文本匹配是一种过于简单的机制,因而无法找到由于广告营销活动而启动的会话。下一节讨论了您该如何使用元字符实现更灵活、更有效的匹配。

使用元字符

元字符是程序或数据字段中的一种特殊字符,可提供有关其他字符的信息。

元字符 描述
。(点号) 匹配单个字符,例如:re:x.z 匹配“xyz”或“xxz”。
*(星号) 匹配一个或多个字符,例如: re:Z* 匹配“ZZZ”。
? (通配符) 匹配 0 个或 1 个字符以执行最低匹配,例如:xy?z 匹配“xy”和“xyz”。

其他常见的正则表达式也可以用于创建更加复杂的搜索字符串。

列表、范围和 OR(或)

文本匹配允许您查找单个字符串,而括号、短划线和分隔线允许您定义要在目标字符串中查找的内容列表。

对于此元字符... 正则表达式处理器会...
方括号 ([]) 将括号内的任意字符与单个字符位置匹配。例如,[AB] 表示匹配字母 A 或字母 B,而 [0123456789] 表示匹配 0 至 9 之间的任意字符。
短划线 (-)

匹配某个范围的字符。因此,我们可以将 [0123456789] 改写成简单的 [0-9]。

这可以扩展为多个范围的字符,以及在一组括号内有多个范围。例如,[0-9A-C] 将匹配 0 至 9 和 A 至 C 的字符。

注意:若要将短划线 (-) 在括号内作为文本进行测试,它必须位于最前或最后。例如,[-0-9] 测试 - 和 0 到 9。

竖线 (|) 将两个选项之一匹配给定的目标字符串。例如,b|nat 可匹配 bat 或 nat。

请仔细研究下面的示例:

模式 字符串 匹配
Win9[58] OS=Win95 Win95
Win95 8 OS=Win98
[0-9] Mozilla/3.0 3
课程[A-Z] Lesson a 没有匹配项,因为小写的 a 不在大写的 A 至 Z 范围之内。

求反

求反用于表示您希望匹配除给定字符以外的任何内容。求反元字符、抑扬符或尖角符号(^)用作括号内的第一个字符,表示您希望匹配的内容不是括号中的其余字符。 例如,要匹配除分号(;)

[^;]

这将匹配除分号以外的任何字符。

定位

若要强制匹配目标字符串的开头或结尾,需要使用两个元字符之一。

对于此元字符… 正则表达式处理器会…
音调符号或脱字符号 (^) 匹配字符串的开头。例如,^[Tt]他将匹配目标字符串“The Beginn”,但不匹配“This is the begin”。
美元符号 ($) 匹配字符串的结尾。例如, [Ee]nd$将匹配“这是结束”,但不匹配“结束是特殊时间”。
注意

如果正则表达式的开头包含^,结尾包含$,则整个目标字符串必须匹配正则表达式。

匹配任何内容

句号 (.) 是一种特殊的元字符,它可以匹配目标字符串中的任意字符。例如,正则表达式 ^…$ 匹配恰好三个字符长度的任何目标字符串。 正则表达式 "…" 匹配至少包含三个字符的任意目标字符串。

重复模式

迭代元字符可让您将一种模式匹配多次。

对于此元字符... 正则表达式处理器会...
问号 (?) 对紧靠元字符 (?) 之前的字符不匹配任何实例或匹配一个实例。例如,模式 rea?d 匹配 red 和 read。
星号 (*) 对紧靠元字符 (*) 之前的字符匹配零个或以上实例。例如,模式 [0–9]* 匹配任意数量的字符 0 至 9(任何整数)。
Plus (+) 对前面的字符或范围匹配一个或多个实例。例如,模式 thre+ 将匹配 three 而不是 through。
{n}

精确匹配前面的字符或范围 n 次。以下模式与美国电话号码匹配: [0-9]{3}-[0-9]{3}-[0-9]{4}.

虽然这不是最佳模式,但它将确定目标字符串的格式是否正确。

{n,m} 匹配前面的字符最少 n 次,最多 m 次。例如,fo{1,2}d 将匹配 fod 和 food,而不匹配 foood。

模式提取

模式匹配只是正则表达式的部分功能。正则表达式还提供了一种用于提取目标字符串关键部分的机制。这是通过使用左圆括号和右圆括号完成的。这些提取内容通常用作另一个过程的输入,并通过使用 %position% 来访问,其中 position 是一个整数,它表示匹配的括号组的计数。

请仔细研究以下模式提取示例:

模式 字符串 匹配 提取
Win(9[58]) OS=Win95 Win95 %1% = 95
(Win)(95|8) OS=Win98 Win98

%1% = Win

%2% = 98

Mozilla/([0-9])。([0-9]) Mozilla/3.0 Mozilla/3.03

%1% = 3

%2% = 0

Lesson([A-Z]) 教训a 没有匹配项,因为小写的 a 不在大写的 A 至 Z 范围之内

在此页面上