System Center Operations Manager 中的正則表達式支援
當您撰寫管理元件時,您可能需要在探索和群組中包含正規表示式比對。 在監視器和規則中的表達式準則中,可能也需要正則表達式比對。
原始產品版本: System Center Operations Manager
原始 KB 編號: 2702651
Operations Manager 支援兩種不同類型的正則表示式。 您必須知道您要處理的元素,才能選擇正確的表達式。 群組成員資格計算和表達式篩選條件會針對模式比對使用截然不同的語法。
群組計算
群組計算使用 PERL
正則表達式語法。 根據預設,比對不區分大小寫,不過您可以使用 XML 中的特殊屬性來指定表達式必須區分大小寫。 如需詳細資訊,請參閱 SimpleCriteriaType。
每當您使用 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}.*$ (其中以 {O} 子字串取代) |
|
MatchesWildcard | ? |
. |
MatchesWildcard | * |
.* |
MatchesWildcard | # |
[0-9] |
注意
如果使用這兩個特殊運算符之一,則評估一律會區分大小寫。
表達式篩選比對準則
管理元件中使用的表示式篩選器會使用 .NET Framework regex 表達式語法。 並非所有表達式都能夠運作。 不過,支援下列 .NET Framework 正則表達式語法元素。 當您使用 Expression Eval 模組時,表達式篩選器會存在於您的管理元件中。
Operations Manager regex 語法
建構 | Operations Manager regex |
---|---|
任何字元 | . |
範圍中的字元 | [ ] |
不在範圍內的字元 | [^ ] |
行的開頭 | ^ |
行尾 | $ |
Or | | |
群組 | ( ) |
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 比較運算符
Operator | 描述 | 範例 |
---|---|---|
=, == | 如果左右操作數相等,則評估為 true 。 | Name = 'mymachine.contoso.com' |
!=, <> | 如果左右操作數不相等,則評估為 true 。 | Name != 'mymachine.contoso.com' |
> | 如果左操作數大於右操作數,則評估為 true 。 | Severity > 0 |
< | 如果左操作數小於右操作數,則評估為 true 。 | Severity < 2 |
>= | 如果左操作數大於或等於右操作數,則評估為 true。 | Severity >= 1 |
<= | 如果左操作數小於或等於右操作數,則評估為 true。 | Severity <= 3 |
LIKE | 如果左操作數符合右操作數所定義的模式,則評估為 true。 使用通配符數據表中的字元來定義模式。 | Name 'LIKE SQL%' 如果值為 SQLEngine, Name 則評估為 true。 Name LIKE '%SQL%' 如果值為 MySQLEngine,則評估為 true。 Name |
符合項目 | 如果左操作數符合右操作數所定義的正則表示式,則評估為 true。 | Name MATCHES 'SQL*05' 如果值是SQL2005,則評估為 true。 Name |
IS NULL | 如果左操作數的值為 null,則評估為 true。 | ConnectorId IS NULL 如果 屬性不包含值, ConnectorId 則評估為 true。 |
IS NOT 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,則評估為 true。 | Name = 'SQL%' AND Description LIKE 'MyData%' |
或 | 如果左操作數或右操作數為 true,則評估為 true。 | Name = 'SQL%' OR Description LIKE 'MyData%' |
NOT | 如果右操作數不是 true,則評估為 true 。 | NOT (Name = 'IIS' OR Name = 'SQL') |
萬用字元
下表定義通配符,您可以在使用 LIKE
運算子時用來建構模式。
搭配 LIKE 運算子使用的通配符運算子
萬用字元 | 描述 | 範例 |
---|---|---|
% | 符合任意數目字元的通配符。 | Name LIKE 'SQL%' 如果值為 SQLEngine, Name 則評估為 true。 Name LIKE '%SQL%' 如果值為 MySQLEngine,則評估為 true。 Name |
_ | 符合單一字元的通配符。 | 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);