Regex 使用Perl正则表达式搜索并替换特定长度的字符串

Regex 使用Perl正则表达式搜索并替换特定长度的字符串,regex,perl,replace,Regex,Perl,Replace,我试图搜索并替换一个长度不超过3个字符的字符串,但没有任何内容(因此“删除”元素内容) 所以我有点像: foreach (@array) { s/^{1,3}$//; } 例如 因此,打印时,预期输出为: result: result: result: three result: four result: five result: result: seven 因此,对于受影响的输入,输出将是一个“空位置” 目前这种情况没有发生。。。我打赌我犯了一个简单的错误,因为我对正则表

我试图搜索并替换一个长度不超过3个字符的字符串,但没有任何内容(因此“删除”元素内容)

所以我有点像:

foreach (@array) {
   s/^{1,3}$//;
}
例如

因此,打印时,预期输出为:

result:  result:  result: three  result: four  result: five  result:  result: seven
因此,对于受影响的输入,输出将是一个“空位置”

目前这种情况没有发生。。。我打赌我犯了一个简单的错误,因为我对正则表达式的理解仍然不稳定。感谢您的帮助


如果有一种简单的方法可以在不创建新数组的情况下完全删除元素,那么了解这一点也很有用

可能
s/^\w{1,3}$//


您忘记了使用
\w
将其与
{1,3}

进行分组。如果要匹配任何三个字符,
s/^。{1,3}$/
应该可以工作。我只是在
^
后面加了一个点,因为您的原始正则表达式没有指定您希望匹配的字符类型。

我理解您的问题的方式是您希望实际修改数组的内容。你可以这样使用:

运行时:

$VAR1 = [
          undef,
          undef,
          'three',
          'four',
          'five',
          undef,
          'seven'
        ];

result:  result:  result: three  result: four  result: five  result:  result: seven

撇开简单的正则表达式问题不谈,您可以使用
grep
选择所需的元素:

@array = grep { !/^.{1,3}$/ } @array;
然后只需打印结果:

print "Result: $_\n" foreach @array;
结果:

Result: three
Result: four
Result: five
Result: seven

也没有影响它:/我想删除正好三个字符或更少的单词,但不是从较长的单词中删除。字符本身并不重要-我之前删除了数字。这很奇怪。^和$应该确保它不会替换较长的单词。现在可以使用了!我不知道到底是什么改变了,但我接受它是有效的。。。多亏了这两个答案,两个答案都是正确的,但另一个答案只是第一个:)任何改变,使其工作也与此相关。谢谢哦,这太好了!通过这种方式删除实际元素会让事情变得更容易,谢谢。
print "Result: $_\n" foreach @array;
Result: three
Result: four
Result: five
Result: seven