为什么我的替换正则表达式仅适用于最后一场比赛

时间:2014-03-20 13:49:53

标签: regex perl

$ ramdetails包含以下内容:

RAM details: 
BankLabel  Capacity    MemoryType  Speed  TypeDetail  
           4294967296  0           1333   128         
           4294967296  0           1333   128         

当我在$ ramdetails

上释放以下内容时
$ramdetails =~ s|(\d+)(\s+\d+\s+\d+\s+\d+\s+$)|$1/$mbmultiplier."MB   ".$2|ge;
$ramdetails =~ s/(\d{1,2})(\s+\d+\s+\d+\s+$)/$ramtype$2/g;   
$ramdetails =~ s/(\d+)(\s+\d+\s+$)/$1."MHz".$2/ge;

$ramdetails =~ m/(\d+)\s+$/g;                                
$typedetail = $typedetails{$typedetail}; 

$ramdetails =~ s/\d+(\s+$)/$typedetail$1/g;

我得到:

RAM details: 
BankLabel  Capacity    MemoryType  Speed  TypeDetail  
           4294967296  0           1333   128         
           4096MB     Unknown           1333MHz   Synchronous         

我不知道为什么只替换最后一场比赛。我知道我对\s+\d+的使用可能有点丰富。

注意:$ramtype来自之前定义的哈希,$mbmultiplier我自己说话。

1 个答案:

答案 0 :(得分:1)

$匹配字符串的末尾,或者在字符串末尾的换行符之前。

您希望添加/m修饰符以更改$以匹配字符串的结尾或任何换行符之前。