正则表达式示例

如果选择正则表达式方法作为源命名策略,则可使用正则表达式示例作为指南,指导您在 OnCommand Insight 自动解析方法中使用自有表达式。

设置正则表达式格式

OnCommand Insight 自动解析创建正则表达式时,可以在 FORMAT 字段中输入值来配置输出格式。

默认设置为 \1,这表示与正则表达式匹配的分区名称将由正则表达式创建的第一个变量的内容替换。在正则表达式中,使用括号语句来创建变量值。如果出现多个括号语句,则按数字从左向右引用变量。这些变量可以按任何顺序在输出格式中使用。通过将常量文本添加到 FORMAT 字段,还可以在输出中插入常量文本。

例如,您可能为此分区命名约定设置以下分区名称:

[Zone number]_[data center]_[hostname]_[device type]_[interface number]

您可能希望输出格式如下:

[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:显示分区名称

在此示例中,使用正则表达式从分区名称中提取主机名。如果分区名称如下所示,则可创建正则表达式:

可用于捕获主机名的正则表达式如下:

 S[0-9]+_([a-zA-Z0-9]*)[_-]HBA[0-9] 

输出结果是所有以 S 开头、后面依次是任意数字组合、下划线、字母数字主机名 (myComputer1Name)、下划线或连字符、大写字母 HBA 和单个数字 (0-9) 的分区。单独的主机名存储在 \1 变量中。

该正则表达式可以分为以下几个部分:

示例 2

在此示例中,跳到第一个下划线“_”,然后将 E 与 E 到第二个“_”之间的所有内容进行匹配,然后跳过之后的所有内容。

分区:Z_E2FHDBS01_E1NETAPP

主机名:E2FHDBS01

正则表达式:.*?_(E.*?)_.*?

示例 3

下面的正则表达式中最后一个部分的圆括号“()”表示主机名。如果您希望 VSAN3 成为主机名,正则表达式将是:[a-zA-Z0-9]+_([a-zA-Z0-9]+).*

分区:A_VSAN3_SR48KENT_A_CX2578_SPA0

主机名SR48KENT

正则表达式:[a-zA-Z0-9]+_[a-zA-Z0-9]+_([a-zA-Z0-9]+).*

示例 4:显示较复杂的命名模式

如果分区名称如下所示,则可创建正则表达式:

可用于捕获这些主机名的正则表达式如下:

([a-zA-Z0-9]*)_.*

使用该表达式求值后,\1 变量将只包含 myComputerName123

该正则表达式可以分为以下几个部分:

示例 5:显示没有模式的分区名称

如果分区名称如下所示,则可创建正则表达式:

可用于捕获这些主机名的正则表达式如下:

(.*?)_.*

\1 变量将包含 myComputerName(第一个分区名称示例中)或 myComputerName123(第二个分区名称示例中)。因此,此正则表达式将匹配第一个下划线之前的所有内容。

该正则表达式可以分为以下几个部分:

示例 6:显示具有模式的计算机名称

如果分区名称如下所示,则可创建正则表达式:

可用于捕获这些主机名的正则表达式如下:

 .*?_.*?_([a-zA-Z0-9]*[ABT])_.*

因为分区命名约定具有更多模式,我们可以使用上述表达式,它将匹配以 A、B 或 T 结尾的主机名(示例中的 myComputerName)的所有实例,并将该主机名放在 \1 变量中。

该正则表达式可以分为以下几个部分:

因此,此正则表达式的结果将导致 \1 变量包含符合以下要求的任何字母数字字符串:

示例 7

分区mycomputername.123_HBA1_symm1_ FA1

主机名:myComputerName123

正则表达式:([a-zA-Z0-9]+)_.*

示例 8

此示例查找第一个 _ 之前的所有内容。

分区:MyComputerName_HBA1_Symm1_FA1

MyComputerName123_HBA1_Symm1_FA1

主机名:MyComputerName

正则表达式:(.*?)_.*

示例 9

此示例查找第一个 _ 到第二个 _ 之间的所有内容。

分区:Z_MyComputerName_StorageName

主机名:MyComputerName

正则表达式:.*?_(.*?)_.*?

示例 10

此示例从分区示例中提取 MyComputerName123。

分区:Storage1_Switch1_MyComputerName123A_A1_FC1

Storage2_Switch2_MyComputerName123B_A2_FC2

Storage3_Switch3_MyComputerName123T_A3_FC3

主机名:MyComputerName123

正则表达式:.*?_.*?_([a-zA-Z0-9]+)*[ABT]_.*

示例 11

分区:Storage1_Switch1_MyComputerName123A_A1_FC1

主机名:MyComputerName123A

正则表达式:.*?_.*?_([a-zA-z0-9]+)_.*?_

示例 12

方括号内的 ^(扬抑符或脱字号)是对表达式取反,例如 [^Ff] 表示除大写或小写 F 之外的任何内容;[^a-z] 表示除小写字母 a 至 z 之外的任何内容;在上例中,是指除 _ 之外的任何内容。格式语句将“-”添加到输出主机名。

分区:mhs_apps44_d_A_10a0_0429

主机名:mhs-apps44-d

正则表达式: ([^_]+)_([AB]).*OnCommand Insight 中的格式:\1-\2 ([^_]+)_

([^_]+)_([^_]+).*OnCommand Insight 中的格式:\1-\2-\3

示例 13

在此示例中,存储别名由“\”分隔,表达式需要使用“\\”来定义字符串实际在使用“\”,这些符号不是表达式本身的一部分。

存储别名:\Hosts\E2DOC01C1\E2DOC01N1

主机名:E2DOC01N1

正则表达式:\\.*?\\.*?\\(.*?)

示例 14

此示例从分区示例中提取 PD-RV-W-AD-2。

分区:PD_D-PD-RV-W-AD-2_01

主机名:PD-RV-W-AD-2

正则表达式:[^-]+-(.*-\d+).*

示例 15

本例中的格式设置将 US-BV- 添加到主机名。

分区:SRV_USBVM11_F1

主机名:US-BV-M11

正则表达式:SRV_USBV([A-Za-z0-9]+)_F[12]

格式:US-BV-\1