正则表达式 父主题

正则表达式用于执行字符串匹配。下表中列出了正则表达式的一些常见示例。要指定正则表达式,请在该特征码之前添加 ".REG." 运算符。
您可以在线访问大量 Web 站点和教程。例如 PerlDoc 站点,其 Web 地址为:
警告
警告
正则表达式是功能强大的字符串匹配工具。因此,趋势科技建议选择使用正则表达式的管理员应该了解并熟悉正则表达式语法。不严谨的正则表达式会对性能产生极大的负面影响。趋势科技建议首先使用不涉及复杂语法的简单正则表达式。当引入新规则时,进行归档并观察邮件安全客户端如何使用规则来管理邮件。在确信规则不会产生意外的结果时,可以进行其他操作。

正则表达式示例

下表中列出了正则表达式的一些常见示例。要指定正则表达式,请在该特征码之前添加 ".REG." 运算符。

计数和分组

元素
含义
示例
.
点号字符代表除换行字符之外的任何字符。
do. 与 doe、dog、don、dos、dot 等匹配。
d.r 与 deer、door 等匹配。
*
星号表示零个或者更多的前一元素。
do* 与 d、do、doo、dooo、doooo 等匹配。
+
加号字符表示一个或多个前一元素。
do+ 与 do、doo、dooo、doooo 等匹配,但不与 d 匹配。
?
问号字符表示零个或一个前一元素。
do?g 与 dg 或 dog 匹配,但不与 doog、dooog 等匹配。
( )
圆括号字符中包含的任何内容均被视为一个实体。
d(eer)+ 与 deer、deereer 或 deereereer 等匹配。+ 符号应用于圆括号中的子字符串,因此该正则表达式查找后面跟随一组或多组 "eer" 的 d。
[ ]
方括号字符表示一组或一系列字符。
d[aeiouy]+ 与 da、de、di、do、du、dy、daa、dae、dai 等匹配。+ 符号应用于方括号中的集合,因此该正则表达式查找后面跟随一个或多个 [aeioy] 集合中的任意字符的 d。
d[A-Z] 与 dA、dB、dC 依次类推一直到 dZ 匹配。方括号中的集合表示 A 到 Z 之间的所有大写字母。
[ ^ ]
方括号中的克拉字符从逻辑上否定一组或一系列指定字符,表示该正则表达式将会与该组或系列以外的任意字符匹配。
d[^aeiouy] 与 db、dc 或 dd、d9、d# 以及其他由 d 后面跟随任何单个非元音字符构成的词匹配。
{ }
大括号字符设定前一元素出现的次数。大括号内的单个值表示仅在出现该值所设定的次数时构成匹配。由逗号分隔的一对数字表示前一字符的一组有效计数。一个数字后面跟随一个逗号表示没有上限。
da{3} 与 daaa--d 匹配,即 d 后面有三个(仅有三个) "a"。da{2,4} 与 daa、daaa、daaaa 和 daaaa 匹配(但不与 daaaaa 匹配),即 d 后面有两个、三个或四个 "a"。da{4,} 与 daaaa、daaaaa、daaaaaa 等匹配,即 d 后面有四个或更多个 "a"。

字符类(简略方式)

元素
含义
示例
\d
任何数字字符,其功能相当于 [0-9] 或 [[:digit:]]
\d 与 1、12、123 等匹配,但与 1b7 不匹配,即与一个或多个任意数字字符匹配。
\D
任何非数字字符,其功能相当于 [^0-9] 或 [^[:digit:]]
\D 与 a、ab、ab& 匹配,但与 1 不匹配,即与不包含 0、1、2、3、4、5、6、7、8 或 9 的一个或多个任意字符匹配。
\w
任何“词”字符,即任何字母数字字符,其功能相当于 [_A-Za-z0-9] 或 [_[:alnum:]]
\w 与 a、ab、a1 匹配,但与 !& 不匹配,即与一个或多个大写或小写字母或数字匹配,但与标点符号或其他特殊字符不匹配。
\W
任何非字母数字字符,功能相当于 [^_A-Za-z0-9] 或 [^_[:alnum:]]
\W 与 * 和 & 匹配,但与 ace 或 a1 不匹配,即与不包含大写/小写字母和数字的一个或多个任意字符匹配。
\s
任意空白字符,包括空格、换行字符、制表符、非换行空格等,其功能相当于 [[:space]]
vegetable\s 与后跟任意空白字符的 "vegetable" 匹配。因此,短语 "I like a vegetable in my soup" 将触发该正则表达式,而短语 "I like vegetables in my soup" 不会触发该正则表达式。
\S
任意非空白字符,包括空格、换行字符、制表符、非换行空格等字符之外的任意其他字符。其功能相当于 [^[:space]]
vegetable\S 与后跟任意非空白字符的 "vegetable" 匹配。因此,短语 "I like vegetables in my soup" 将触发该正则表达式,而短语 "I like a vegetable in my soup" 不会触发该正则表达式。

字符类

元素
含义
示例
[:alpha:]
任何字母字符
.REG.[[:alpha:]]与 abc、def、xxx 匹配,但不与 123 或 @#$ 匹配。
[:digit:]
任何数字字符;功能上等同于 \d
.REG.[[:digit:]]匹配 1、12 和 123 等。
[:alnum:]
任何“词”字符,即任何字母数字字符;功能上等同于 \w
.REG.[[:alnum:]]与 abc 和 123 匹配,但不与 ~!@ 匹配。
[:space:]
任意空白字符;空格、换行字符、制表符、非换行空格等;功能上等同于 \s
.REG.(vegetable)[[:space:]]与后跟任意空白字符的 "vegetable" 匹配。因此,短语 "I like a vegetable in my soup" 将触发该正则表达式,而短语 "I like vegetables in my soup" 不会触发该正则表达式。
[:graph:]
除空格、控制字符等之外的任何字符
.REG.[[:graph:]]与 123、abc、xxx、>< 匹配,但与空格或控制字符不匹配。
[:print:]
任何字符(类似于 [:graph:])但包括空格字符
.REG.[[:print:]]与 123、abc、xxx、>< 和空格字符匹配。
[:cntrl:]
任何控制字符(例如,CTRL + C、CTRL + X)
.REG.[[:cntrl:]]与 0x03、0x08 匹配,但不与 abc、123、!@# 匹配。
[:blank:]
空格和制表符字符
.REG.[[:blank:]]与空格和制表符字符匹配,但不与 123、abc、!@# 匹配
[:punct:]
标点符号字符
.REG.[[:punct:]]与 ; :? ! ~ @ # $ % & * ‘ “ 等匹配,但与 123、abc 不匹配
[:lower:]
任何小写字母字符(注意:必须启用“启用区分大小写匹配”,否则其作用将如同 [:alnum:])
.REG.[[:lower:]]与 abc、Def、sTress、Do 等匹配,但不与 ABC、DEF、STRESS、DO、123、!@# 匹配。
[:upper:]
任何大写字母字符(注意:必须启用“启用区分大小写匹配”,否则其作用将如同 [:alnum:])
.REG.[[:upper:]]与 ABC、DEF、STRESS、DO 等匹配,但不与 abc、Def、Stress、Do、123、!@# 匹配。
[:xdigit:]
十六进制数字中允许的数位 (0-9a-fA-F)
.REG.[[:xdigit:]]匹配 0a、7E 和 0f 等。

范式锚点

元素
含义
示例
^
表示一个字符串的开头。
^(notwithstanding) 与以 "notwithstanding" 开头的任何文本块匹配。因此,短语 "notwithstanding the fact that I like vegetables in my soup" 将触发该正则表达式,而 "The fact that I like vegetables in my soup notwithstanding" 不会触发该正则表达式。
$
表示一个字符串的结尾。
(notwithstanding)$ 与以 "notwithstanding" 结尾的任何文本块匹配。因此,短语 "notwithstanding the fact that I like vegetables in my soup" 不会触发该正则表达式,而 "The fact that I like vegetables in my soup notwithstanding" 将触发该正则表达式。

转义序列和字母字符串

元素
含义
示例
\
为了与正则表达式中具有特殊含义的某些字符(例如,"+")匹配。
(1) .REG.C\\C\+\+ 与 "C\C++" 匹配。
(2) .REG.\* 匹配 *。
(3) .REG.\? 匹配 ?。
\t
表示制表符字符。
(stress)\t 与包含子字符串 "stress" 且该子字符串后面紧跟制表符 (ASCII 0x09) 字符的任何文本块匹配。
\n
表示换行字符。
注意
注意
不同平台中的换行字符具有不同的表示方法。在 Windows 中,换行字符是一对字符,即一个回车符后面跟随一个换行符。在 Unix 和 Linux 中,换行字符只是一个换行符,而在 Macintosh 中换行字符只是一个回车符。
(stress)\n\n 与包含子字符串 "stress" 且该子字符串后面紧跟两个换行 (ASCII 0x0A) 字符的任何文本块匹配。
\r
表示回车字符。
(stress)\r 与包含子字符串 "stress" 且该子字符串后面紧跟一个回车 (ASCII 0x0D) 字符的任何文本块匹配。
\b
表示退格字符。
OR
表示边界。
(stress)\b 与包含子字符串 "stress" 且该子字符串后面紧跟一个退格 (ASCII 0x08) 字符的任何文本块匹配。
词边界 (\b) 的定义为两个字符之间的点,一边是 \w,另一边是 \W(顺序不限)。字符串的开头和结尾之外的虚字计为与 \W 相匹配。(在字符类内,\b 表示退格,而不是词边界。)
例如,以下正则表达式可与身份证号码相匹配:.REG.\b\d{3}-\d{2}-\d{4}\b
\xhh
表示通过给定十六进制代码表示的 ASCII 字符(其中 hh 代表任何两位十六进制值)。
\x7E(\w){6} 与恰好包含六位字母数字字符并且六位字母数字字符前面带有一个 ~(波形符)字符的任何文本块匹配。因此,该表达式与词 "~ab12cd"、"~Pa3499" 匹配,但与 "~oops" 不匹配。

正则表达式生成器

在确定数据丢失预防规则的配置方式时,需要考虑到,正则表达式生成器只能根据以下规则和限制创建简单的表达式:
  • 仅字母数字字符可充当变量。
  • 所有其他字符,如 [-] 和 [/] 等,仅可以充当常量。
  • 变量范围只能从 A-Z 和 0-9;您不能对范围进行限制,如限制为 A-D。
  • 此工具生成的正则表达式不区分大小写。
  • 此工具生成的正则表达式只能进行正匹配,不能进行负匹配(“如果不匹配”)。
  • 基于您的示例的表达式只可以匹配与示例数量完全相同的字符和空格,该工具无法生成可以匹配“一个或多个”给定字符或字符串的特征码。

复杂表达式语法

关键字表达式由令牌组成,令牌是用于将表达式与内容进行匹配的最小单位。令牌可以是运算符、逻辑符号或操作数,即运算符作用的参数或值。
运算符包括 .AND.、.OR.、.NOT.、.NEAR.、.OCCUR.、.WILD.、".(." 和 " .)."。操作数和运算符必须用一个空格分隔开。一个操作数还可以包含多个令牌。请参阅关键字

正则表达式工作原理

以下示例描述了社会保险的缺省过滤器之一 — 内容过滤器的工作原理:
[Format] .REG.\b\d{3}-\d{2}-\d{4}\b
以上表达式使用 \b(一个退格字符),后跟 \d(任何数字),然后跟 {x}(表示数字的数量),最后加 -(表示连字号)。该表达式与社会保险号相匹配。下表描述了与示例正则表达式相匹配的字符串:

与社会保险正则表达式相匹配的数字

.REG.\b\d{3}-\d{2}-\d{4}\b
333-22-4444
匹配
333224444
不匹配
333 22 4444
不匹配
3333-22-4444
不匹配
333-22-44444
不匹配
如果将该表达式修改成以下情况,
[Format] .REG.\b\d{3}\x20\d{2}\x20\d{4}\b
新表达式则符合以下顺序:
333 22 4444