我正在尝试搜索并替换长度不超过3个字符的字符串(所以'删除'元素内容)。
所以我有类似的东西:
foreach (@array) {
s/^{1,3}$//;
}
E.g。
@array = ('one', 'two', 'three', 'four', 'five', 'six', 'seven');
因此,在打印时,预期输出将为:
result: result: result: three result: four result: five result: result: seven
因此,对于受影响的输入,输出将是一个“空位”。
目前这还没有发生......我打赌我犯了一个简单的错误,因为我对正则表达式的理解仍然不稳定。任何帮助赞赏!
如果有一种简单的方法可以在不创建新数组的情况下完全删除元素,那么知道这一点也很有用。
答案 0 :(得分:5)
如果您想匹配任意三个字符,s/^.{1,3}$//
应该有效。我刚刚在^
之后添加了一个点,因为你的原始正则表达式没有指定你想要匹配的1-3个字符。
答案 1 :(得分:4)
可能s/^\w{1,3}$//;
您忘记\w
将其与{1,3}
答案 2 :(得分:4)
除了简单的正则表达式问题,您可以使用grep
选择所需的元素:
@array = grep { !/^.{1,3}$/ } @array;
然后只打印结果:
print "Result: $_\n" foreach @array;
结果:
Result: three
Result: four
Result: five
Result: seven
答案 3 :(得分:0)
我阅读你的问题的方式是你想要实际修改数组的内容。你可以这样使用splice:
#!/usr/bin/env perl
use strict;
use warnings;
use Data::Dumper;
my @array = qw(one two three four five six seven);
my $i = 0;
for (@array) {
m/^\w{1,3}$/ && splice(@array, $i, 1, undef);
$i++;
}
print Dumper \@array;
print "\n";
for my $e (@array) {
print defined $e ? "result: $e " : "result: "
}
print "\n";
跑步时:
$VAR1 = [
undef,
undef,
'three',
'four',
'five',
undef,
'seven'
];
result: result: result: three result: four result: five result: result: seven