一般表示式 上層主題

一般表示式可用來執行字串比對。下表列出一些常見的一般表示式範例以供參考。若要指定一般表示式,請在該比對模式之前加一個「.REG.」運算子。
線上有一些相關的網站和教學課程,可供您學習使用。PerlDoc 網站是其中一個這樣的網站,網址是:
警告
警告
一般表示式是強大的字串比對工具。因此,趨勢科技建議選擇使用一般表示式的系統管理員必須熟悉及慣用一般表示式語法。撰寫不當的一般表示式可能對效能造成嚴重的負面影響。趨勢科技建議您先從簡單的一般表示式開始著手,而不要使用複雜的語法。在引進新規則時,請先使用封存處理行動,並觀察 Messaging Security Agent 如何使用您的規則來管理郵件。當您有把握規則不會產生無法預期的結果時,才可以變更處理行動。

一般表示式範例

下表列出一些常見的一般表示式範例以供參考。若要指定一般表示式,請在該比對模式之前加一個「.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 等。+ 符號會套用至括弧內的子字串,因此一般表示式會尋找在 d 後跟隨一組或多組「eer」的項目。
[ ]
方括號字元表示一個字元集合或字元範圍。
d[aeiouy]+ 的相符項目有 da、de、di、do、du、dy、daa、dae、dai 等。+ 符號會套用至方括號內的字元集合,因此一般表示式會尋找其後跟隨一個或多個屬於集合 [aeioy] 中任何字元的 d。
d[A-Z] 的相符項目有 dA、dB、dC 等,一直類推到 dZ。方括號中的集合代表從 A 到 Z 之間所有大寫字母的範圍。
[ ^ ]
方括號內的插入號 (Carat) 字元會在邏輯上否定指定的集合或範圍,意即一般表示式將比對集合或範圍以外的任何字元。
d[^aeiouy] 的相符項目有 db、dc、dd、d9、d# 等,也就是其後跟隨任何除了母音字母以外單一字元的 d。
{ }
大括號字元設定前面項目的特定出現次數。大括號內的單一值表示只會比對那些多次。由逗號分隔的一對數字代表前面字元的一組有效計數。後面跟著逗號的單一數字表示沒有上限。
da{3} 的相符項目為 daaa,也就是其後跟隨 3 個且僅出現 3 次「a」的 d。da{2,4} 的相符項目為 daa、daaa、daaaa 和 daaaa(但不包括 daaaaa),也就是其後跟隨出現 2、3 或 4 次「a」的 d。da{4,} 的相符項目如 daaaa、daaaaa、daaaaaa 等,也就是其後跟隨出現 4 或更多次「a」的 d。

字元類別(速記)

項目
涵義
範例
\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
任何空白字元,空格、新行、定位鍵 (Tab)、不中斷空格等字元,功能相當於 [[:space]]
vegetable\s 與在「vegetable」後跟隨任何空白字元的項目相符。因此字句如「I like a vegetable in my soup」將會觸發一般表示式,但是「I like vegetables in my soup」則不然。
\S
任何非空白字元,除了空格、新行、定位鍵 (Tab)、不中斷空格等字元,功能相當於 [^[: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:]
任何空白字元;空格、新行、定位鍵 (Tab)、不中斷空格等字元,功能相當於 \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
表示具有指定十六進位碼(其中的 hh 代表任何兩位數十六進位值)的 ASCII 字元。
\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