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
搜尋包含兩個字串之一的任何相符專案, string1
或 string2
:
^(string1)|^(string2)$
範例 3
搜尋遞歸位於兩個資料夾路徑下的資料夾的任何相符專案, (/var/lib/string1/*
或 /var/lib/string2/*
) :
^(\/var\/lib\/string1\/.*)|^(\/var\/lib\/string2\/.*)$
範例 4
搜尋包含兩個字串之一的任何相符專案, Agent1.contoso.com
或 Agent2.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%' 如果值為 SQLEngine, Name 則評估為 true。 Name LIKE '%SQL%' 如果值為 MySQLEngine, Name 則評估為 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%' 如果值為 SQLEngine, Name 則評估為 true。 Name LIKE '%SQL%' 如果值為 MySQLEngine, Name 則評估為 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);