System Center Operations Manager 中的正則表達式支援

當您撰寫管理元件時,您可能必須在探索和群組中包含正規表示式比對。 在監視器和規則中,表達式準則中的模式比對也可能需要正則表示式。

原始產品版本: System Center Operations Manager
原始 KB 編號: 2702651

Operations Manager 支援兩種不同類型的正則表示式。 您必須知道您正在使用的元素,才能選擇正確的表達式。 群組成員資格計算和表達式篩選會針對模式比對使用截然不同的語法。

群組計算

群組計算會使用 PERL 正則表達式語法。 根據預設,比對不區分大小寫,不過您可以在 XML 中使用特殊屬性來指定表達式必須區分大小寫。 如需詳細資訊,請 參閱 SimpleCriteriaType

每當您使用模組時,都會在管理元件 (MP) 中 Group Calc 找到群組計算。 表達 GroupCalc 式會使用 運算 MatchesRegularExpression 符,根據模式比對表達式來建立動態群組成員資格。 這個運算子的實作會將MP XML中找到的表達式傳遞至 dbo.fn_MatchesRegularExpression SQL呼叫名稱。 如果此呼叫傳回 0 的值,則比對為 false。 如果傳回值 1,則相符專案為 true。

重要事項

dbo.fn_MatchesRegularExpression SQL 呼叫名稱本身會區分大小寫,因此MatchesRegularExpression動態群組成員資格準則中使用的運算子也會區分大小寫。

GroupCalc 也支援兩個特殊子元素,可建立下列常見 regex 樣式查詢的抽象表達式。

GroupCalc 特殊函式

GroupCalc 子元素 MP 運算式 Regex 對等專案
ContainsSubstring ^*{O}.*$ (Wherein {O} 會由子字串) 取代
MatchesWildcard ? .
MatchesWildcard * .*
MatchesWildcard # [0-9]

注意事項

如果使用這兩個特殊運算符的其中一個,評估一律會區分大小寫。

表達式篩選比對準則

管理元件中使用的表示式篩選器會使用 .NET Framework regex 表達式語法。 並非所有表達式都可運作。 不過,支援下列 .NET Framework 正則表示式語法元素。 當您使用表達式評估模組時,表達式篩選會存在於您的管理元件中。

Operations Manager regex 語法

構建 Operations Manager regex
任何字元 .
範圍中的字元 [ ]
不在範圍內的字元 [^ ]
行的開頭 ^
行尾 $
|
Group ( )
0 或 1 個相符專案 ?
0 個以上的相符專案 *
1 個以上的相符專案 +
正好 N 個相符專案 {n}
至少 N 個相符專案 {n, }
最多 N 個相符專案 { , n}
N 到 M 相符專案 {n, m}
新行字元 \n
索引標籤字元 \t

Operations Manager 正則表示式 (regex) 範例

範例 1

搜尋包含單一字串的任何相符專案: string1

^(string1)$

範例 2

搜尋包含兩個字串之一的任何相符專案, string1string2

^(string1)|^(string2)$

範例 3

搜尋遞歸位於兩個資料夾路徑下的資料夾的任何相符專案, (/var/lib/string1/*/var/lib/string2/*) :

^(\/var\/lib\/string1\/.*)|^(\/var\/lib\/string2\/.*)$

範例 4

搜尋包含兩個字串之一的任何相符專案, Agent1.contoso.comAgent2.contoso.com (不區分大小寫的) :

^(?i)(agent1.contoso.com)|(?i)(agent2.contoso.com)$

搜尋包含 Agent 不區分大小寫 () 的任何相符專案:

^(?i)(agent.*)$

透過 SDK 的正規表示式

Operations Manager SDK 具有用於篩選物件的 符合 準則運算符。 此運算子使用的功能 MatchesCriteria 與稍早所述的 GroupCalc 案例相同。

當您使用 SDK 建構準則表示式來尋找 Operations Manager 資料庫中的物件時,下列語法元素有效且有用:

  • 比較運算子
  • 通配符
  • DateTime 值
  • 整數到 XML 列舉比較

比較運算子

當您建構準則表示式時,可以使用比較運算符。 下表說明有效的運算符。

SDK 比較運算符

運算子 描述 範例 ()
=, == 如果左右操作數相等,則評估為 true Name = 'mymachine.contoso.com'
!=, <> 如果左右操作數不相等,則評估為 true Name != 'mymachine.contoso.com'
> 如果左操作數大於右操作數,則評估為 true Severity > 0
< 如果左操作數小於右操作數,則評估為 true Severity < 2
>= 如果左操作數大於或等於右操作數,則評估為 true Severity >= 1
<= 如果左操作數小於或等於右操作數,則評估為 true Severity <= 3
喜歡 如果左操作數符合右操作數所定義的模式,則評估為 true 。 使用 通配符 數據表中的字元來定義模式。 Name 'LIKE SQL%'
如果值為 SQLEngineName則評估為 true

Name LIKE '%SQL%'
如果值為 MySQLEngineName則評估為 true
相符項目 如果左操作數符合右操作數所定義的正則表示式,則評估為 true Name MATCHES 'SQL*05'
如果SQL2005值,Name則評估為 true
IS NULL 如果左操作數的值為 null,則評估為 true ConnectorId IS NULL
如果 屬性不包含值,ConnectorId則評估為 true
不是 NULL 如果左操作數的值不是 Null,則評估為 true ConnectorId IS NOT NULL
如果 屬性包含值,ConnectorId則評估為 true
IN 如果左操作數的值在右操作數所定義的值清單中,則評估為 true

注意IN 運算子僅適用於 Guid 類型的屬性。
Id IN ('080F192C-52D2-423D-8953-B3EC8C3CD001', '080F192C-53B2-403D-8753-B3EC8C3CD002')
如果 屬性的Id值是表達式中提供的兩個全域唯一標識符之一,則評估為 true
AND 如果左右操作數都成立,則評估為 true Name = 'SQL%' AND Description LIKE 'MyData%'
OR 如果左操作數或右操作數為 true,則評估為 true Name = 'SQL%' OR Description LIKE 'MyData%'
如果正確的操作數不是 true,則評估為 true NOT (Name = 'IIS' OR Name = 'SQL')

通 配 符

下表定義使用 運算符時,可用來建構模式的 LIKE 通配符。

與 LIKE 運算子搭配使用的通配符運算子

萬用字元 描述 範例
% 符合任意數目的字元的通配符。 Name LIKE 'SQL%'
如果值為 SQLEngineName則評估為 true

Name LIKE '%SQL%'
如果值為 MySQLEngineName則評估為 true
_ 符合單一字元的通配符。 Name LIKE 'SQL200_'
針對下列Name值評估為 true

SQL2000
SQL2005

注意:表達式會針對 SQL200 評估為 false,因為符號 _ 必須與值中的Name一個字元完全相符。
[] 通配符,符合字元集中所括住的任何一個字元。

注意 在限定 MonitoringObject 屬性的參考時,也會使用方括弧。 如需詳細資訊,請 參閱定義監視對象的查詢
Name LIKE 'SQL200[05]'
針對下列Name值評估為 true

SQL2000
SQL2005

表達式會針對 SQL2003 評估為 false
[^] 通配符,符合任何未包含在字元集中的字元。 Name LIKE 'SQL200[^05]'
針對 SQL2003 評估為true

表達式會針對 SQL2000 SQL2005 評估為 false

DateTime 比較

當您在查詢表示式中使用 DateTime 值時,請使用一般 DateTime 格式 (G) 將值轉換成 DateTime 字串值。 例如:

string qStr = "TimeCreated <= '" + myInstant.ToString("G") + "'";
ManagementPackCriteria mpCriteria = new ManagementPackCriteria(qStr);

將所有日期值轉換 成 G 格式 (GMT) ,以進行有效的字串比較。

整數值與列舉的比較

當您在查詢表示式中使用整數列舉值時,請將列舉值轉換成整數。

例如:

string qStr = "Severity > " + (int)ManagementPackAlertSeverity.Warning;
MonitoringAlertCriteria alertCriteria = new MonitoringAlertCriteria(qStr);

其他相關資訊