2

我正在尝试替换文本中的所有单词,除了我在数组中的一些单词。这是我的代码:

my $text = "This is a text!And that's some-more text,text!";
while ($text =~ m/([\w']+)/g) {

    next if $1 ~~ @ignore_words;

    my $search  = $1;
    my $replace = uc $search;
    $text =~ s/$search/$replace/e;
}

但是,该程序不起作用。基本上我试图让所有单词都大写,但跳过@ignore_words 中的那些。我知道这是正则表达式中使用的变量的问题,但我无法解决问题。

4

2 回答 2

1
#!/usr/bin/perl

my $text = "This is a text!And that's some-more text,text!";

my @ignorearr=qw(is some);

my %h1=map{$_ => 1}@ignorearr;
$text=~s/([\w']+)/($h1{$1})?$1:uc($1)/ge;

print $text;

在运行这个,

THIS is A TEXT!AND THAT'S some-MORE TEXT,TEXT!
于 2012-10-26T13:54:59.153 回答
0

如果不是将表达式应用于循环的同一控制变量,您可以从代码中找出问题while,只需让s/../../eg全局为您执行此操作:

my $text = "This is a text!And that's some-more text,text!";

my @ignore_words = qw{ is more };

$text =~ s/([\w']+)/$1 ~~ @ignore_words ? $1 : uc($1)/eg;

print $text;

在运行时:

THIS is A TEXT!AND THAT'S SOME-more TEXT,TEXT!
于 2012-10-27T16:39:54.687 回答