正規表示式範例
如果您選擇正規表示式方法作為來源命名策略,則可以使用正規表示式範例作為Data Infrastructure Insights自動解析方法中使用的表達式的指南。
格式化正規表示式
在為Data Infrastructure Insights自動解析建立正規表示式時,您可以透過在名為 FORMAT 的欄位中輸入值來設定輸出格式。
預設為 \1,這表示與正規表示式相符的區域名稱將被正規表示式建立的第一個變數的內容取代。在正規表示式中,變數值由括號語句建立。如果出現多個括號語句,則變數以從左到右的數字方式引用。變數可以在輸出格式中以任意順序使用。透過將常數文字新增至 FORMAT 字段,也可以將其插入輸出中。
例如,對於此區域命名約定,您可能具有下列區域名稱:
[Zone number]_[data center]_[hostname]_[device type]_[interface number] * S123_Miami_hostname1_filer_FC1 * S14_Tampa_hostname2_switch_FC4 * S3991_Boston_hostname3_windows2K_FC0 * S44_Raleigh_hostname4_solaris_FC1
您可能希望輸出採用以下格式:
[hostname]-[data center]-[device type] 為此,您需要捕獲變數中的主機名稱、資料中心和設備類型字段,並在輸出中使用它們。以下正規表示式可以實現此目的:
.*?_([a-zA-Z0-9]+)_([a-zA-Z0-9]+)_([a-zA-Z0-9]+)_.* 因為有三組括號,所以變數 \1、\2 和 \3 將會被填入。
然後,您可以使用以下格式來接收您喜歡的格式的輸出:
\2-\1-\3 您的輸出如下:
hostname1-Miami-filer hostname2-Tampa-switch hostname3-Boston-windows2K hostname4-Raleigh-solaris
變數之間的連字符提供了插入格式化輸出中的常數文字的範例。
範例
範例 1 顯示區域名稱
在此範例中,您使用正規表示式從區域名稱中提取主機名稱。如果您有類似以下區域名稱的內容,則可以建立正規表示式:
-
S0032_myComputer1Name-HBA0
-
S0434_myComputer1Name-HBA1
-
S0432_myComputer1Name-HBA3
可以用來捕捉主機名稱的正規表示式是:
S[0-9]+_([a-zA-Z0-9]*)[_-]HBA[0-9] 結果是匹配所有以 S 開頭的區域,後面跟著任意數字組合,再後跟下劃線、字母數字主機名(myComputer1Name)、下劃線或連字符、大寫字母 HBA 和單個數字(0-9)。主機名稱單獨儲存在 *\1* 變數中。
正規表示式可以分解成以下幾個部分:
-
“S”代表區域名稱並開始表達式。這僅匹配區域名稱開頭的“S”。
-
括號內的字元 [0-9] 表示「S」後面必須是 0 到 9 之間的數字(包括 0 和 9)。
-
+號表示前面括號內的資訊必須出現1次或多次。
-
_(底線)表示區域名稱中 S 後面的數字後面必須緊跟著一個底線字元。在此範例中,區域命名約定使用下劃線將區域名稱與主機名稱分開。
-
在必需的底線之後,括號表示其中包含的模式將儲存在 \1 變數中。
-
括號中的字元[a-zA-Z0-9]表示相符的字元全部為字母(不區分大小寫)和數字。
-
括號後面的 *(星號)表示括號內的字元出現 0 次或多次。
-
括號中的字元 [_-](底線和破折號)表示字母數字模式後面必須跟底線或破折號。
-
正規表示式中的字母 HBA 表示區域名稱中必須出現此精確的字元序列。
-
最後一組括號內的字元 [0-9] 符合從 0 到 9(含)的單一數字。
範例 2
在這個例子中,跳到第一個底線“”,然後匹配 E 和其後的所有內容直到第二個“”,然後跳過其後的所有內容。
區域: Z_E2FHDBS01_E1NETAPP
*主機名稱:*E2FHDBS01
正規表示式:.?(E.?).*?
範例 3
正規表示式(如下)中最後一部分的括號「()」標識哪部分是主機名稱。如果您希望 VSAN3 作為主機名,則其名稱為:_([a-zA-Z0-9])。 *
*區域:*A_VSAN3_SR48KENT_A_CX2578_SPA0
*主機名稱:*SR48KENT
正規表示式: _[a-zA-Z0-9]+_([a-zA-Z0-9]).*
範例 4 展示了更複雜的命名模式
如果您有類似以下區域名稱的內容,則可以建立正規表示式:
-
myComputerName123-HBA1_Symm1_FA3
-
myComputerName123-HBA2_Symm1_FA5
-
myComputerName123-HBA3_Symm1_FA7
可以用來捕捉這些內容的正規表示式是:
([a-zA-Z0-9]*)_.* 經過此表達式評估後,\1 變數將只包含 _myComputerName123_。
正規表示式可以分解成以下幾個部分:
-
括號表示其中包含的模式將儲存在 \1 變數中。
-
括號中的字元 [a-zA-Z0-9] 表示任何字母(無論大小寫)或數字都會相符。
-
括號後面的 *(星號)表示括號內的字元出現 0 次或多次。
-
正規表示式中的 _(底線)字元表示區域名稱必須在前面括號匹配的字母數字字串後緊跟著下劃線。
-
這 。 (句點)匹配任何字元(通配符)。
-
*(星號)表示前面的句點通配符可以出現 0 次或多次。
換句話說,組合 .* 表示任意字元、任意次數。
範例 5 顯示沒有模式的區域名稱
如果您有類似以下區域名稱的內容,則可以建立正規表示式:
-
myComputerName_HBA1_Symm1_FA1
-
myComputerName123_HBA1_Symm1_FA1
可以用來捕捉這些內容的正規表示式是:
(.*?)_.* \1 變數將包含 _myComputerName_(在第一個區域名稱範例中)或 _myComputerName123_(在第二個區域名稱範例中)。因此,該正規表示式將符合第一個底線之前的所有內容。
正規表示式可以分解成以下幾個部分:
-
括號表示其中包含的模式將儲存在 \1 變數中。
-
這 。 * (句點星號)匹配任意字符,任意次數。
-
括號後面的 *(星號)表示括號內的字元出現 0 次或多次。
-
? 字元使匹配變得非貪婪。這會強制它在第一個下劃線處停止匹配,而不是最後一個下劃線。
-
字元 _.* 與找到的第一個底線及其後面的所有字元相符。
範例 6 顯示具有模式的電腦名稱
如果您有類似以下區域名稱的內容,則可以建立正規表示式:
-
Storage1_Switch1_myComputerName123A_A1_FC1
-
Storage2_Switch2_myComputerName123B_A2_FC2
-
Storage3_Switch3_myComputerName123T_A3_FC3
可以用來捕捉這些內容的正規表示式是:
.*?_.*?_([a-zA-Z0-9]*[ABT])_.* 因為區域命名約定具有更多的模式,我們可以使用上述表達式,它將匹配以 A、B 或 T 結尾的主機名稱(範例中的 myComputerName)的所有實例,並將該主機名稱放在 \1 變數中。
正規表示式可以分解成以下幾個部分:
-
這 。 * (句點星號)匹配任意字符,任意次數。
-
? 字元使匹配變得非貪婪。這會強制它在第一個下劃線處停止匹配,而不是最後一個下劃線。
-
下劃線字元與區域名稱中的第一個底線相符。
-
因此,第一個 .*?_ 組合與第一個區域名稱範例中的字元 Storage1_ 相符。
-
第二個 .*?_ 組合的行為與第一個類似,但與第一個區域名稱範例中的 Switch1_ 相符。
-
括號表示其中包含的模式將儲存在 \1 變數中。
-
括號中的字元 [a-zA-Z0-9] 表示任何字母(無論大小寫)或數字都會相符。
-
括號後面的 *(星號)表示括號內的字元出現 0 次或多次。
-
正規表示式 [ABT] 中的括號字元與區域名稱中的單一字元相符,該字元必須是 A、B 或 T。
-
括號後面的 _(底線)表示 [ABT] 字元匹配後面必須跟一個底線。
-
這 。 * (句點星號)匹配任意字符,任意次數。
因此,其結果將導致 \1 變數包含任何字母數字字串:
-
前面是一些字母數字字元和兩個底線
-
後面跟著一個底線(然後是任意數量的字母數字字元)
-
在第三個底線之前,以 A、B 或 T 作為結尾字元。
範例 7
*區域:*myComputerName123_HBA1_Symm1_FA1
*主機名稱:*myComputerName123
正規表示式:([a-zA-Z0-9]+)_。
範例 8
此範例查找第一個 _ 之前的所有內容。
區域:MyComputerName_HBA1_Symm1_FA1
MyComputerName123_HBA1_Symm1_FA1
主機名稱:MyComputerName
正規表示式:(.?)_.
範例 9
此範例查找第一個 _ 之後到第二個 _ 的所有內容。
區域: Z_MyComputerName_StorageName
*主機名稱:*我的電腦名
正規表示式: .?(.?).*?
範例 10
此範例從區域範例中提取“MyComputerName123”。
*區域:*Storage1_Switch1_MyComputerName123A_A1_FC1
Storage2_Switch2_MyComputerName123B_A2_FC2
Storage3_Switch3_MyComputerName123T_A3_FC3
*主機名稱:*MyComputerName123
正規表示式: .?.?([a-zA-Z0-9]+)[ABT]_.
範例 11
*區域:*Storage1_Switch1_MyComputerName123A_A1_FC1
*主機名稱:*MyComputerName123A
正規表示式: .?.?([a-zA-z0-9]+).*?
範例 12
方括號內的 (脫字符或插入符號)*用於對表達式進行否定,例如,[Ff] 表示除大寫或小寫 F 之外的任何字符,[^az] 表示除小寫 a 到 z 之外的所有內容,在上述情況下,表示除 _ 之外的任何字符。格式語句在輸出主機名稱中新增“-”。
*區域:*mhs_apps44_d_A_10a0_0429
*主機名稱:*mhs-apps44-d
正規表示式: ()_([AB]).*Data Infrastructure Insights中的格式:\1-\2 ([^_])_ ()_([^_]).*Data Infrastructure Insights中的格式:\1-\2-\3
範例 13
在這個例子中,儲存別名由“\”分隔,表達式需要使用“\\”來定義字串中實際使用的“\”,並且它們不是表達式本身的一部分。
儲存別名: \Hosts\E2DOC01C1\E2DOC01N1
*主機名稱:*E2DOC01N1
正規表示式: \\.?\\.?\\(.*?)
範例 14
此範例從區域範例中提取“PD-RV-W-AD-2”。
*區域:*PD_D-PD-RV-W-AD-2_01
*主機名稱:*PD-RV-W-AD-2
正規表示式:-(.*-\d).*
範例 15
在這種情況下,格式設定將“US-BV-”新增至主機名稱。
*區域:*SRV_USBVM11_F1
*主機名稱:*US-BV-M11
*正規表示式:*SRV_USBV([A-Za-z0-9]+)_F[12]
格式: US-BV-\1