我的情况是否适合使用'/ i'REGEX属性?

时间:2011-01-18 03:37:10

标签: regex perl data-extraction

我正在制作我的特定版本VMWare可以支持的所有可能的操作系统名称的大型目录。最初我写的是他们所有人,因为他们站在VMX文件中,但后来我发现了一个网站,他们都列出了,问题是他们没有正确地提供一个“完美”匹配,这将是使用它的最佳时机不区分大小写的正则表达式属性?

另外作为一个附带问题,是否可能从网站上提取操作系统列表?他们看起来是在HTML格式图表中。它可以节省我很多时间来输入它们。

我查看了HTML :: Table摘录,我真的不明白如何使用它。就表格而言,我能够找到网站代码中的部分,然后我将其复制到一个新的html文件中,以便我可以在桌面上使用它。

这很奇怪,我可能遗漏了一些东西。但我无法与不区分大小写匹配。当用/ xmi结束我的正则表达式时,我得到了这个输出;

Use of uninitialized value $guest_os in concatenation (.) or string at discovery4.pl line 146

我发现这意味着没有匹配与我正在尝试打印的标量相关联。

无论如何我知道我遇到了一个问题,不想与任何情况相匹配,因为如果我将winnetstandard修改为winNetStandard它的工作原理并说, Windows Server 2003, Standard Edition。它应该说是什么。

2 个答案:

答案 0 :(得分:2)

HTML::TableExtract可能会有所帮助。就匹配而言,我不确定你想要匹配的是什么;如果你只是比较两个名字,uc($foo) eq uc($bar)更有意义。但是如果你有一个正则表达式并希望整个匹配不区分大小写,那么/i就会这样做。

啊,所以你想获得支持的os名称并将它们组装成正则表达式并使用它进行匹配?然后,给定@osnames,你可能想要这样的东西:

my $osnames = join('|', map quotemeta, sort { length($b) <=> length($a) } @osnames);
my $regex = qr/guestOS\s*=\s*"(?i:$osnames)"/;

?i:将案例不敏感的范围限制为仅仅操作系统名称;只有当您希望guestOS也不区分大小写时才使用/i(和(?:$osnames))。

答案 1 :(得分:0)

这是使用/i属性的正确时间,因为更改案例不会对任何事情造成任何伤害。我要做的是获取操作系统列表,将复制列表所在部分的html,在列表中使用正则表达式,使其以您需要的格式输出,然后使用输出的文本。< / p>