[英]Search and replace string of certain length using Perl regex
我試圖搜索並替換長度為3個字符的字符串,沒有任何東西(所以'刪除'元素內容)。
所以我有類似的東西:
foreach (@array) {
s/^{1,3}$//;
}
例如
@array = ('one', 'two', 'three', 'four', 'five', 'six', 'seven');
因此,在打印時,預期輸出將是:
result: result: result: three result: four result: five result: result: seven
因此,對於受影響的輸入,輸出將是“空位”。
目前這還沒有發生......我打賭我犯了一個簡單的錯誤,因為我對正則表達式的理解仍然不穩定。 任何幫助贊賞!
如果有一種簡單的方法可以在不創建新數組的情況下完全刪除元素,那么知道這一點也很有用。
如果你想匹配任何三個字符, s/^.{1,3}$//
應該可以工作。 我剛剛在^
之后添加了一個點,因為你的原始正則表達式沒有指定你想要匹配的1-3個字符。
可能s/^\\w{1,3}$//;
你忘記\\w
將它與{1,3}
分組
除了簡單的正則表達式問題,您可以使用grep
選擇所需的元素:
@array = grep { !/^.{1,3}$/ } @array;
然后只打印結果:
print "Result: $_\n" foreach @array;
結果:
Result: three
Result: four
Result: five
Result: seven
我讀你的問題的方式是你想要實際修改數組的內容。 你可以這樣使用拼接 :
#!/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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.