正则表达式是用来匹配数据的一组字母、数字和特殊字符。 您可以在 XTM 设备配置中使用与 Perl 兼容的正则表达式 (PCRE) 以在代理操作中匹配某些流量类型。 例如,可以使用一个正则表达式来阻止与某些网站的连接,同时允许与另一些网站的连接。 若接收方不是您公司有效的电子邮件地址,您还可以拒绝 SMTP 连接。 例如,如果您想要阻止某网站中违反了公司 Internet 使用策略的部分,可以在 HTTP 代理配置的“URL 路径”类别中使用正则表达式。
有关如何在 Fireware 中使用通配符的详细信息,请参阅下面的部分。
最简单的正则表达式是由要匹配的文本组成的。 字母、数字和其他可打印字符全部与您键入的字母、数字或字符相匹配。 由字母和数字组成的正则表达式只能匹配含有表达式中全部的字母和数字并按其顺序排列的字符序列。
例如:fat 可匹配 fat、fatuous、infatuated,以及许多其他的序列。
Fireware 可接受包含正则表达式的任意字符序列。 一个正则表达式通常都可匹配出多个序列。 如果将正则表达式用作“拒绝”规则的源,可能会在无意中阻止一些网络流量。 建议您将配置保存至 XTM 设备之前,对正则表达式进行全面的测试。
要同时匹配多个不同的字符序列,必须使用特殊字符。 最常用的特殊字符就是句点 (.),它与通配符类似。 在正则表达式中加入句点后,它可以匹配任意的字符、空格或制表符 (tab)。 句点不能匹配换行符(\r\n 或 \n)。
例如:f..t 可匹配 foot、feet、f&#t、f -t 以及 f\t3t。
要匹配特殊字符(如句点),必须要在字符前添加反斜线 (\)。 如果在特殊字符前没有加反斜线,那么可能无法正确执行该规则。 如果字符前已有反斜线(例如 \t [制表位]),则通常没有必要再添加第二个反斜线。
下列特殊字符前必须添加反斜线才能匹配真实字符: ? . * | + $ \ ^ ( ) [
示例: \$9\.99 匹配 $9.99
要匹配十六进制字符,需要使用 \x 或 %0x%。 不区分大小写的修饰符对十六进制字符没有影响。
示例: \x66 或 %0x66% 都可匹配 f,但无法匹配 F。
要匹配不定长度的字符串,必须使用重复修饰符。 您可以将修饰符应用于单一字符或一组字符。 重复修饰符共有四种类型:
要将修饰符同时应用于多个字符,必须进行字符组合。 要组合字符序列,需要在序列两端加上括号。
例如:ba(na)* 可匹配 ba、bana、banana 和 banananananana。
要匹配组合中的某个字符,使用方括号(而不是括号)来创建字符类。 可以将重复修饰符应用于字符类。 字符类中的字符顺序并不重要。
字符类中的特殊字符只有右方括号 (])、反斜线 (\)、插入符 (^) 以及连字符 (-)。
例如:gr[ae]y 可匹配 gray 和 grey。
在字符类中使用插入符时,不能将其作为首字符。
在字符类中使用连字符时,需要将其作为首字符。
否定字符类可匹配除指定字符之外的任意字符。 在任意字符类的开始键入一个插入符 (^) 可将该字符类定义为否定字符类。
示例: [Qq][^u] 可匹配 Qatar,但不能匹配 question 或 Iraq。
字符类通常和字符范围一起使用,以便选择任意的字母或数字。 范围是由连字符 (-) 连接的两个字母或数字,这两个字符代表字符组的起始和结束字符。 在此范围内的任意字符都可以进行匹配。 如果在字符类中添加了重复修饰符,那么修饰符之前的类将会被重复。
示例: [1-3][0-9]{2} 可匹配 100 和 399,以及这两个数字之间的任意数值。
一些常用范围会有简化符号。 您可以在其他字符类中或之外使用简化字符类。 否定简化字符类可匹配的字符与该简化字符类所匹配的字符相反。 下表列举了几个常见简化字符类及其否定值。
类及其含义 | 否定类及其含义 |
---|---|
\w 任意字母或数字 [A-Za-z0-9] | \W 非字母或数字 |
\s 任意空格字符 [\t\r\n] | \S 非空格字符 |
\d 任意数字 [0-9] | \D 非数字 |
要匹配行首或行尾,必须使用定位符。 插入符 (^) 匹配行首,而美元符 ($) 则匹配行尾。
示例: 如果 ampere 是该行中的唯一单词,那么 ^am.*$ 可匹配 ampere。 但它不能匹配 dame。
可以使用 \b 来匹配单词边界,或者用 \B 来匹配不是单词边界的任意位置。
单词边界有三种类型:
可以使用替换从多个可能的正则表达式中匹配出唯一的正则表达式。 正则表达式中的替换运算符是通道符号 (|)。 它与布尔运算符 OR 类似。
例如:m(oo|a|e)n 可匹配第一次出现的 moon、man 或 men。
匹配 PDF 内容类型(MIME 类型)
^%PDF-
匹配任意有效 IP 地址
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9] [0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]? [0-9][0-9]?)
匹配多数电子邮件地址
[A-Za-z0-9._-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}