System Center Operations Manager 中的正则表达式支持
创作管理包时,可能需要在发现和组中包括正则表达式匹配。 在监视器和规则中的表达式条件中,可能还需要正则表达式匹配。
原始产品版本: System Center Operations Manager
原始 KB 数: 2702651
Operations Manager 支持两种不同类型的正则表达式。 必须知道正在使用哪个元素才能选择正确的表达式。 组成员身份计算和表达式筛选器对模式匹配使用不同的语法。
组计算
组计算使用 PERL
正则表达式语法。 默认情况下,匹配不区分大小写,但是可以通过在 XML 中使用特殊属性来指定表达式必须区分大小写。 有关详细信息,请参阅 SimpleCriteriaType。
每当使用 Group Calc
模块时,会在管理包(MP)中找到组计算。 表达式 GroupCalc
使用 MatchesRegularExpression
运算符基于模式匹配表达式创建动态组成员身份。 此运算符的实现将 MP XML 中找到的 dbo.fn_MatchesRegularExpression
表达式传递给 SQL 调用名称。 如果此调用返回值 0,则匹配项为 false。 如果返回值 1,则匹配项为 true。
重要
dbo.fn_MatchesRegularExpression
SQL 调用名称本身区分大小写,因此动态MatchesRegularExpression
组成员身份条件中使用的运算符也将区分大小写。
GroupCalc 还支持两个特殊的子元素,这些子元素使以下常见正则表达式样式查询的抽象表达式。
GroupCalc 特殊函数
GroupCalc 子元素 | MP 表达式 | 正则表达式等效项 |
---|---|---|
ContainsSubstring | ^*{O}.*$ (其中替换为 {O} 子字符串) |
|
MatchesWildcard | ? |
. |
MatchesWildcard | * |
.* |
MatchesWildcard | # |
[0-9] |
注意
如果使用这两个特殊运算符之一,则计算始终区分大小写。
表达式筛选器匹配条件
管理包中使用的表达式筛选器使用 .NET Framework 正则表达式语法。 并非所有表达式都起作用。 但是,支持以下 .NET Framework 正则表达式语法元素。 使用表达式 Eval 模块时,管理包中存在表达式筛选器。
Operations Manager 正则表达式语法
构造 | Operations Manager 正则表达式 |
---|---|
任何单个字符 | 。 |
范围中的字符 | [ ] |
不在区域中的字符 | [^ ] |
行首 | ^ |
行尾 | $ |
或 | | |
组 | ( ) |
0 或 1 匹配 | ? |
0 个或多个匹配项 | * |
1 个或多个匹配项 | + |
完全 N 匹配 | {n} |
至少 N 个匹配项 | {n,} |
最多 N 个匹配项 | { , n} |
N 到 M 匹配项 | {n, m} |
换行符 | \n |
制表符 | \t |
Operations Manager 正则表达式(正则表达式)示例
示例 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 具有用于 筛选对象的“匹配 条件”运算符。 此运算符使用与前面提到的 GroupCalc 事例相同的功能 MatchesCriteria
。
使用 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 |
LIKE | 如果左侧操作数与右操作数定义的模式匹配,则计算结果 为 true 。 使用通配符表中的字符定义模式。 | Name 'LIKE SQL%' 如果值为 SQLEngine,则 Name 计算结果为 true。 Name LIKE '%SQL%' 如果值为 MySQLEngine,则 Name 计算结果为 true。 |
匹配 | 如果左侧操作数与右操作数定义的正则表达式匹配,则计算结果为 true 。 | Name MATCHES 'SQL*05' 如果值SQL2005,则 Name 计算结果为 true。 |
为 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,则计算结果 为 true 。 | Name = 'SQL%' AND Description LIKE 'MyData%' |
OR | 如果左侧操作数或右操作数为 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,则 Name 计算结果为 true。 |
_ | 与单个字符匹配的通配符。 | Name LIKE 'SQL200_' 对于以下 Name 值,计算结果为 true:SQL2000 SQL2005 注意:表达式的计算结果为 false,因为符号 _ 必须与值中的 Name 一个字符完全匹配。 |
[] | 与包含在字符集中的任何一个字符匹配的通配符。 注释括号在限定对 MonitoringObject 属性的引用时也使用。 有关详细信息,请参阅 定义监视对象的查询。 |
Name LIKE 'SQL200[05]' 对于以下 Name 值,计算结果为 true:SQL2000 SQL2005 表达式的计算结果为 false,SQL2003。 |
[^] | 与字符集中未包含的任何字符匹配的通配符。 | Name LIKE 'SQL200[^05]' SQL2003的计算结果为 true。 表达式的计算结果为 false,SQL2000和SQL2005。 |
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);