我有一个字符串,我想替换除模式之外的所有内容。
现在我知道我想要做的是
$line =~ s/[A-Z]{4}[0-9]{4}//g;
但反转,以便除了模式之外什么都不用。
答案 0 :(得分:2)
有点不清楚你在问什么,但你可能希望尝试类似下面的东西,它捕获模式然后用捕获替换该行:
#!/usr/bin/env perl
use warnings;
use strict;
my @lines = (
'HELLO WORLD',
'HELLO ABCD1234 WORLD',
'HELLOABCD1234WORLD',
'H E L LO ABCD1234 WORLD',
);
my $re_match = qr([A-Z]{4}[0-9]{4});
for my $line (@lines) {
print "$line => ";
if ($line =~ $re_match) {
$line =~ s|^.*($re_match).*$|$1|;
print $line . "\n";
} else {
print "does not match pattern $re_match \n";
}
}
<强>输出强>
HELLO WORLD => does not match pattern (?^:[A-Z]{4}[0-9]{4})
HELLO ABCD1234 WORLD => ABCD1234
HELLOABCD1234WORLD => ABCD1234
H E L LO ABCD1234 WORLD => ABCD1234
答案 1 :(得分:0)
perl -E '$_="xxABCD1234xxABCD1234xx"; @m = $_ =~ /[A-Z]{4}[0-9]{4}/g; @m and $_ = join "", @m; say'
输出:
ABCD1234ABCD1234