我想使用正则表达式来匹配VMX文件中的另一行,但它只有“一半”的作品。我会解释。为什么这个正则表达式只有一半工作?
我试图匹配的行例如是scsi0:0.fileName = "Test01.vmdk
。我的正则表达式似乎正常工作。现在曲线球,如果我尝试使用相同的正则表达式来寻找scsi0:1.fileName = "Test01_1.vmdk
。我的正则表达式找不到它,只显示它为每个虚拟机找到的第一个磁盘。我知道我错过了一些我不能把手指放在上面的东西。唯一奇怪的是,但我认为没有什么区别,第二张磁盘scsi0:1.fileName = "Test01_1.vmdk
的行位于文件的底部,scsi0:0.fileName = "Test01.vmdk
的行位于文件的中间位置,之后有更多的行用于其他选项它。正则表达式是否过早停止?这甚至有可能吗?
无论如何,这里是我正在处理的代码块。
foreach my $vm (@virtual_machines) {
my $vmx_file = $ssh1->capture("cat $virtual_machines{$vm}{VMX}");
my $inc = -1;
if ($vmx_file =~ m/scsi([0-3]):([0-9]|1[0-5])\.fileName\s+=\s+"(?<DISK>\w+?\.vmdk)"/xm) {
++$inc;
$virtual_disks{$vm}{"Disk$inc"} = "$+{DISK}";
}
这很奇怪,但如果我明确插入SCSI ID的号码,我正在寻找它的工作。由于某种原因,它无法自己找到它。我也更新了我的例子。
因为它是半正确 – Ben 2011-01-14 19:23:40
但在我的情况下,是不是就+顾及一切从A-Z,A-Z,0-9和下划线和连字符。? – ianc1215 2011-01-14 19:27:35
不是现在问题的答案,但我想你会发现你的'[0-15]'角色班不会做你想做的。这将匹配0,1或5. – Aron 2011-01-14 19:27:44