0

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

另外作为一个附带问题,是否可能从网站中提取操作系统列表?它们看起来在 HTML 格式的图表中。这将节省我大量的时间,不得不把它们全部打出来。

我查看了 HTML::Table 提取,但我并不真正了解如何使用它。就表格而言,我能够在网站代码中找到该部分,并将其复制到一个新的 html 文件中,这样我就可以将它放在我的桌面上。

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

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

我发现这意味着没有匹配项与我要打印的标量相关联。

无论如何,我知道我遇到了一个问题,不想匹配任何情况,因为如果我修改winnetstandardwinNetStandard可以工作并说,; Windows Server 2003, Standard Edition. 这是它应该说的。

4

2 回答 2

2

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

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

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

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

于 2011-01-18T03:47:37.693 回答
0

这将是使用该/i属性的正确时机,因为更改大小写不会真正伤害任何东西。获取操作系统列表的方法是复制列表所在部分的 html,在列表中使用正则表达式,以便它以您需要的格式输出,然后使用输出的文本。

于 2011-01-18T03:47:15.437 回答