perl中如何提取包含相同的字符串

例如:
@abc = (abc,def,ghi,gkl,mno,abc.qqq,def.qqq,ghi.qqq,gkl.qqq,mno.qqq)
我现在想把@abc中所有包含.qqq的提取出来,并给到另一个变量。
即得到:
@www=(abc.qqq,def.qqq,ghi.qqq,gkl.qqq,mno.qqq)

第二种:或者能不能将所有带.qqq的字符串,去掉.qqq然后给到另一个变量。

因为我想比对所有.qqq前面相同的字母。但现在有.qqq所以对比不了.

菜鸡,求大神指教。

按照你的要求编写的perl程序如下(先用正则表达式提取,再用正则表达式替换)

@abc = ("abc","def","ghi","gkl","mno","abc.qqq","def.qqq","ghi.qqq","gkl.qqq","mno.qqq");

$size=@abc
;

@www=();

for($i=0;$i<$size;$i++){

 $string=$abc[$i];

 if($string=~ m/[A-Za-z]+\.qqq/){

  push(@www,$&);

 }

}

print "@www\n"; 

$size=@www
;

for($i=0;$i<$size;$i++){

 $www[$i]=~ s/\.qqq//i;

}

print "@www\n";

追问

是的,非常感谢你提供的方案,但现在运行的还是在¥WWW里面,我如何将".qqq"的数组,和没有".qqq"的数组分成两个变量去呢。

追答

将去掉".qqq"的放到另一个数组中就行了,完整的代码如下

@abc = ("abc","def","ghi","gkl","mno","abc.qqq","def.qqq","ghi.qqq","gkl.qqq","mno.qqq");

$size=@abc
;

@www=();

for($i=0;$i<$size;$i++){

 $string=$abc[$i];

 if($string=~ m/[A-Za-z]+\.qqq/){

  push(@www,$&);

 }

}

print "@www\n"; 

$size=@www
;

@shuzu=();

for($i=0;$i<$size;$i++){

 $string=$www[$i];

 $string=~ s/\.qqq//i;

 push(@shuzu,$string);

}

print "@shuzu\n";

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-11-01

@abc = ("abc","def","ghi","gkl","mno","abc.qqq","def.qqq","ghi.qqq","gkl.qqq","mno.qqq","123.qqq");

@a = grep{s/(\w+)\.qqq$/$1/}@abc;

print"@a\n";