我正在为我的特定VMWare版本支持的所有可能的操作系统名称创建一个大型目录。最初我把它们都写在VMX文件中,但后来我发现一个网站上列出了它们,问题是它们没有正确地大小写来提供一个“完美”的匹配,现在是不是使用regex属性来区分大小写的最佳时机?
另外,作为一个次要问题,是否可以从网站中提取OSs列表?它们看起来像是在HTML格式的图表中。这将为我节省大量的时间,让我把它们都打出来。
我看过HTML::Table extract,但我真的不知道如何使用它。就表格而言,我能够在网站代码中找到该部分,并将其复制到一个新的html文件中,这样我就可以将其放在我的桌面上。
这很奇怪,我可能遗漏了什么。但是我不能匹配不区分大小写。当我的正则表达式以/xmi结束时,我得到以下输出;
Use of uninitialized value $guest_os in concatenation (.) or string at discovery4.pl line 146
。
我发现这意味着没有与我试图打印的标量相关联的匹配项。
无论如何,我知道我遇到了问题,因为如果我将winnetstandard
修改为winNetStandard
,它就会工作,并说:;Windows Server 2003, Standard Edition
,所以我不想匹配大小写。这就是它应该说的。
发布于 2011-01-18 03:47:38
HTML::TableExtract可能会有所帮助。就匹配而言,我不确定您尝试匹配的是什么;如果您只是比较两个名称,uc($foo) eq uc($bar)
更有意义。但是,如果您有一个正则表达式,并且希望整个匹配不区分大小写,/i
将会这样做。
啊,所以你想获取支持的操作系统名称,并将它们组装成正则表达式,然后使用它进行匹配?然后,给定@osname,你可能想要这样的东西:
my $osnames = join('|', map quotemeta, sort { length($b) <=> length($a) } @osnames);
my $regex = qr/guestOS\s*=\s*"(?i:$osnames)"/;
?i:
将不区分大小写的范围限制为仅操作系统名称;只有当您希望guestOS也不区分大小写时,才会使用/i
(和(?:$osnames)
)。
发布于 2011-01-18 03:47:15
这将是使用/i
属性的正确时机,因为更改大小写实际上不会造成任何损害。要获得操作系统列表,我会做的是复制列表所在部分的html,在列表上使用regex,以便它以您需要的格式输出,然后使用输出的文本。
https://stackoverflow.com/questions/4720248
复制