我正在制作我的特定版本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
。它应该说是什么。
答案 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>