Regex 使用Perl正则表达式搜索并替换特定长度的字符串
我试图搜索并替换一个长度不超过3个字符的字符串,但没有任何内容(因此“删除”元素内容) 所以我有点像: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 因此,对于受影响的输入,输出将是一个“空位置” 目前这种情况没有发生。。。我打赌我犯了一个简单的错误,因为我对正则表
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