正規表示式文法

Hyades 配接器配置編輯器可讓您利用正規表示式來說明日誌檔應該如何轉換成 Common Base Event 記錄。 下表是正規表示式用法的準則。

一般規則

正規表示式比對

表示式 比對
{n,m} 至少 n 次,但不超出 m
{n,} 至少 n
{n} 正好 n
* 0 或多次
+ 1 或多次
? 0 或 1 次
. 括號內正規表示式中除了 \n 以外的所有項目
^ 在括號內正規表示式中用來比對字串或行開頭(緊接在換行之後的位置或緊接在字串開頭之前的位置)的空值記號
$ 在括號內正規表示式中用來比對字串尾或行尾(緊接在換行之前的位置或緊接在字串結尾之後的位置)的空值記號
\b 在字元類別內倒退 ([abcd])
\b 用來比對單字界限的空值記號(一邊是 \w,另一邊是 \W
\B 空值記號比對不是單字界限的界限
\A 只在字串開頭
\Z 只在字串結尾(或在結束的換行之前)
\ 換行
\r 回車
\t 欄標
\f 換頁
\d 數字 [0-9]
\D 非數字 [^0-9]
\w 單字字元 [0-9a-z_A-Z]
\W 非單字字元 [^0-9a-z_A-Z]
\s 空白字元 [ \t\n\r\f]
\S 非空白字元 [^ \t\n\r\f]
\xnn nn 字元的十六進位表示法
\cD 對應的控制字元
\nn\nnn nn 字元的八進位表示法(除非是向後參照)。
\1, \2, \3 ... 用來比對任何第一、第二、第三個括號群組,依此類推。 這稱為向後參照。如果沒有對應的群組,數字會解譯成字元的八進位表示法。
\0 空值字元。任何其他反斜線字元都用來比對它本身。
*? 0 或多次
+? 1 或多次
?? 0 或 1 次
{n}? 正好 n
{n,}? 至少 n
{n,m}? 至少 n 次,但不超出 m

分組和擷取比對項目

如果要分組表示式的各個部分,請使用 Meta 字元 ( )。 這使括號中的正規表示式能夠作為單一單元來處理。 比方說,正規表示式

severity:(1|2)
用來比對 severity:1 或 severity:2 型樣。

如果要擷取字串中用分組 Meta 字元比對過的部分,請用特殊變數 $1、$2 等。

# 從 $pattern = <a href="secure_logon.html">登入表單</a>擷取名稱和 URL
$pattern =~ <a href=\"(.*)\">(.*)</a> ; # 利用分組來比對
$url = $1;                # $1 等於 secure_logon.html
$pagename = $2;           # $2 等於登入表單

Perl 5 延伸正規表示式

表示式 比對
(?#text) 透成忽略 text 的內嵌註解。
(?:regexp) 如同 "()" 一樣將東西分組,但不會使分組的比對儲存起來。
(?=regexp) 寬度為零的正的前看確認。比方說,\w+(?=\s) 會比對出後面有接著空白字元的單字,但是最後的 MatchResult 中,並不會包括空白字元。
(?!regexp) 寬度為零的負的前看確認。比方說,foo(?!bar) 用來比對後面沒有 bar 的任何 foo。 這是一個寬度為零的確認,它表示 a(?!b)d 用來比對 ad,因為 a 後面接著的字元不是 b (d),且 d 是接著寬度為零的確認。
(?imsx) 一或多個內嵌的型樣比對修飾元:
i 會啟用不區分大小寫
m
會啟用輸入的多行處理
s
會啟用輸入的單行處理
x
會啟用延伸的空白字元註解

相關概念
Hyades 通用日誌配接器概觀
Common Base Event 格式規格

相關作業
建立日誌剖析器
建立規則型配接器
建立靜態配接器

相關參照
配接器配置檔結構
Common Base Event 格式規格
配接器配置編輯器
正規表示式文法