Skip to main content
Data Infrastructure Insights
本繁體中文版使用機器翻譯,譯文僅供參考,若與英文版本牴觸,應以英文版本為準。

規則運算式範例

貢獻者

如果您已選擇規則運算式方法做為來源命名策略、您可以使用規則運算式範例做為資料基礎架構 Insights 自動解析方法中所使用之運算式的指南。

格式化規則運算式

為 Data Infrastructure Insights 自動解析建立規則運算式時、您可以在名稱為 format 的欄位中輸入值、以設定輸出格式。

預設設定為\1、表示符合規則運算式的區域名稱會由正規表示式所建立的第一個變數內容所取代。在規則運算式中、變數值是由插入的實質陳述式所建立。如果出現多個實質陳述式、則會以數字方式從左到右參照變數。這些變數可依任何順序在輸出格式中使用。您也可以將固定文字新增至格式欄位、將其插入輸出中。

例如、此區域命名慣例可能有下列區域名稱:

 [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之間(含)。

  • +號表示前方括弧中的資訊必須存在1次以上。

  • _(底線)表示S後的數字必須緊接著區域名稱中的底線字元。在此範例中、區域命名慣例會使用底線來分隔區域名稱與主機名稱。

  • 在所需的底線之後、括弧會指出內含的模式將儲存在\1變數中。

  • 方括弧內的字元[A-zA-Z0-9]表示要比對的字元為所有字母(不論大小寫)和數字。

  • 方括弧後面的*(星號)表示方括弧內的字元出現0次以上。

  • 方括弧內的字元[_-](底線和破折號)表示字母數字型式必須後面加上底線或破折號。

  • 規則運算式中的字母HBA表示區域名稱中必須有此確切的字元順序。

  • 最後一組方括弧內的字元[0-9]會比對從0到9(含)的單一位數。

範例2

在此範例中、跳到第一個底線「」、然後比對E及其後的所有項目、直到第二個「」、然後跳過之後的所有項目。

區域: Z_E2FHDBS1_E1NETAPP

主機名稱: E2FHDBS01.

  • RegExp:*.(E?)。*?

範例3

正則運算式(下方)最後一節的括弧「()」可識別哪個部分是主機名稱。如果您想要VSAN3做為主機名稱、應該是:_([A-zA-Z0-9])。*

區域: a_VSAN3_SR48KEND_A_CX2578_SPa0

主機名稱: SR48KENT.

  • RegExp:*_[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])_.*
由於區域命名慣例具有更多的模式、因此我們可以使用上述運算式、將主機名稱(範例中為myComputerName)的所有執行個體、以A、A B或T結尾、並將該主機名稱置於\1變數中。

規則運算式可細分為其元件:

  • *(句點星號)會比對任何字元,任何次數。

  • ? 字元會使相符的項目變得不貪婪。這迫使它在第一個底線而非最後一個底線停止比對。

  • 底線字元符合區域名稱中的第一個底線。

  • 因此、第一個.*?組合會符合第一個區域名稱範例中的字元storage1

  • 第二個.*?_組合的行為與第一個區域名稱範例中的Switch1_類似。

  • 括弧表示內含的模式將儲存在\1變數中。

  • 方括弧內的字元[A-zA-Z0-9]表示任何字母(不論大小寫)或數字都會相符。

  • 方括弧後面的*(星號)表示方括弧內的字元出現0次以上。

  • 規則運算式[ABT]中的方括弧字元會比對區域名稱中必須為A、B或T的單一字元

  • 括弧後面的_(底線)表示必須在[ABT]字元相符之後加上底線。

  • *(句點星號)會比對任何字元,任何次數。

因此、此結果會導致\1變數包含下列任何英數字元字串:

  • 前面有一些英數字元和兩個底線

  • 後面加上底線(然後是任意數量的英數字元)

  • 在第三個底線之前、有A、B或T的最終字元。

範例7

  • 區域: * myComputerName123_HBA1_Symm1_FA1

主機名稱: myComputerName123.

  • RegExp:*([A-zA-Z0-9]+)_.*

範例8

此範例會找出第一個_之前的所有項目。

區域:MyComputerName_HBA1_Symm1_FA1

MyComputerName123_HBA1_Symm1_FA1

主機名稱:MyComputerName

regexp:(.?)_.

範例9

此範例會找出第1 個之後的所有項目、直到第二個

區域: Z_MyComputerName_StorageName

主機名稱: MyComputerName

  • RegExp:*.(.?).*?

範例10

此範例從區域範例中擷取「MyComputerName123」。

區域: storage1_Switch1_MyComputerName123A_A1_FC1

Storage2_Switch2_MyComputerName123B_A2_FC2

Storage3_Switch3_MyComputerName123T_A3_FC3

主機名稱: MyComputerName123.

  • RegExp:*..([A-zA-Z0-9]+)[ABT].

範例11

區域: storage1_Switch1_MyComputerName123A_A1_FC1

主機名稱: MyComputerName123A.

  • RegExp:*..([A-zA-Z0-9]+).*?_

範例12

(規避或插入符號)*內部方括弧*會否定運算式、例如、[FF]表示大寫或小寫F以外的任何項目、而[^A-z]則表示除大小寫a到z以外的所有項目、在上述情況下、除_以外的任何項目。format陳述式會在輸出主機名稱中加入"-"。

區域: MHS_apps44_d_a_10a0_0429

主機名稱: MHS-apps44至d

  • RegExp : * ( [^]+ ) _ ( [AB] )。 * Data Infrastructure Insights 中的格式: \1-\2 ( [^]+ ) _ ( [^]+ ) _ ( [^]+ )。 * Data Infrastructure Insights 中的格式: \1-\2-\3

範例13

在此範例中、儲存別名以「\」分隔、運算式需要使用「\」來定義字串中實際使用的是「\」、而這些不是運算式本身的一部分。

儲存別名:\hosts\E2DOC01C1\E2DOC01N1.

主機名稱: E2DOC01N1.

  • RegExp:*\.?\.?(.*?)

範例14

此範例從區域範例中擷取「PD-RV-W-AD-2」。

區域: PD_D-PD-RV-W-AD-2_01

主機名稱: PD-RV-W-AD-2.

  • RegExp:*-(.*-\d).*

範例15

在此案例中的格式設定會將「US-BV-」新增至主機名稱。

區域: SRV_USB VM11_F1

主機名稱: US-BV-M11.

  • RegExp:* SRV_USBV([A-ZA-Z0-9]+)_F[12]

格式: US-BV-\1