我的情况是否是使用“ /i”正则属性的合适场所?
-
12-10-2019 - |
题
我正在制作所有可能由我的特定版本VMware支持的所有可能的操作系统名称的目录。最初,我在VMX文件中写下它们时都在写所有内容,但后来我找到了一个已列出的网站,问题是它们没有适当地提供“完美”的匹配项,这是使用该网站案例不敏感的正则属性?
另外,作为附带问题,是否可以从网站上提取OSS列表?他们看起来位于HTML形成的图表中。这将为我节省很多时间,不得不将它们全部输入。
我看了HTML ::表提取物,但我真的不明白如何使用它。就表格而言,我能够在网站代码中找到该部分,然后复制到新的HTML文件中,以便我可以在桌面上将其放置。
这很奇怪,我可能缺少一些东西。但是我无法与案例不敏感。当用 /xmi结束我的正则时,我会得到此输出;
Use of uninitialized value $guest_os in concatenation (.) or string at discovery4.pl line 146
.
我发现这意味着没有匹配可以与我要打印的标量相关联。
无论如何,我知道我遇到的问题都不想在没有案例的情况下匹配,因为如果我修改 winnetstandard
至 winNetStandard
它有效并说;Windows Server 2003, Standard Edition
. 。这就是应该说的。
解决方案
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:
将案例无敏感性的范围限制在OS名称上;只有您希望Guestos也会变得不敏感时,您才会使用 /i
(和 (?:$osnames)
).
其他提示
这将是使用的合适时机 /i
属性,因为改变案件不会真正损害任何事情。我要做的以获取操作系统列表将是复制列表所在的部分的HTML,在列表上使用Regex,以便它以所需的格式输出,然后使用输出的文本。