簡體   English   中英

使用Perl正則表達式搜索並替換一定長度的字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM