Arrays 在数组中查找匹配的子字符串

Arrays 在数组中查找匹配的子字符串,arrays,regex,perl,Arrays,Regex,Perl,我想在数组中找到一个子字符串。如何打印所有匹配的子字符串 我的代码如下: @ar = <DATA>; @skm = grep{m/SLP/g} @ar; print "@skm\n"; __DATA__ VEFGSLPPKKKLVESLPMMK 在标量中,我可以使用$&,但我不知道如何在数组中实现它。我该怎么做?grep只检查列表中的元素是否匹配。您可能希望使用map将列表元素实际转换为您需要的内容,在本例中,使用regex从@ar数组中捕获并返回每个元素的转换列表 my @skm

我想在数组中找到一个子字符串。如何打印所有匹配的子字符串

我的代码如下:

@ar = <DATA>;
@skm = grep{m/SLP/g} @ar;
print "@skm\n";
__DATA__
VEFGSLPPKKKLVESLPMMK

在标量中,我可以使用
$&
,但我不知道如何在数组中实现它。我该怎么做?

grep
只检查列表中的元素是否匹配。您可能希望使用
map
将列表元素实际转换为您需要的内容,在本例中,使用regex从
@ar
数组中捕获并返回每个元素的转换列表

my @skm = map {m/(SLP)/g} @ar;

grep
仅检查列表中的元素是否匹配。您可能希望使用
map
将列表元素实际转换为您需要的内容,在本例中,使用regex从
@ar
数组中捕获并返回每个元素的转换列表

my @skm = map {m/(SLP)/g} @ar;

grep
运算符只返回输入列表的子集,其中第一个参数中的表达式的计算结果为真值

由于
@ar
数组只有一个元素,并且该元素包含
SLP
,因此调用
grep
会将其返回给您

听起来您需要的是
map
,它在列表上下文中执行时返回第一个参数中表达式的结果。表达式
/SLP/g
返回字符串中出现的所有
SLP
,因此

map /SLP/g, <DATA>
输出

XXX
XXX
XXX
XXX

grep
运算符只返回输入列表的子集,其中第一个参数中的表达式的计算结果为真值

由于
@ar
数组只有一个元素,并且该元素包含
SLP
,因此调用
grep
会将其返回给您

听起来您需要的是
map
,它在列表上下文中执行时返回第一个参数中表达式的结果。表达式
/SLP/g
返回字符串中出现的所有
SLP
,因此

map /SLP/g, <DATA>
输出

XXX
XXX
XXX
XXX

谢谢@mpapec。特殊变量不在数组中?与
$&
@Hussain no一样,grep仅在条件计算为
true
@Hussain时返回列表元素,
grep
与正则表达式匹配无关(例如
my@bad=grep{$\u>$max}@nums;
),因此
$&
grep
无关。谢谢@mpapec>。特殊变量不在数组中?与
$&
@Hussain no一样,grep仅在条件计算结果为
true
@Hussain时返回列表元素,
grep
与正则表达式匹配无关(例如
my@bad=grep{$\u>$max}@nums;
),因此
$&
grep
无关。