仅将正则表达式替换应用于带引号的部分

| 我需要应用正则表达式过滤以仅影响引号内的文本内容,而我感到困惑。
 $in = \'ab  c \"d e  f\" g   h \"i    j\" k l\';
 #...?
 $inquotes =~ s/\\s+/_/g; #arbitrary regexp working only on the pieces inside quote marks
 #...?
 $out = \'ab  c \"d_e_f\" g   h \"i_j\" k l\';
(如果这样更容易,最终效果可以删除/删除引号,
\'ab  c d_e_f g
...)     
已邀请:
        如果您只想使用正则表达式,则应该可以使用以下命令:
my $in = q(ab  c \"d e  f\" g   h \"i    j\" k l);

$in =~ s{\"(.+?)\"}{$1 =~ s/\\s+/_/gr}eg;
print \"$in\\n\";
(您说过\'s可能会被删除:)) HTH, 保罗     
        您可以找出一些看起来像线噪的可爱技巧。 或者,您可以使其简单易读,而只需使用
split
join
。使用引号作为字段分隔符,对其他所有字段进行操作:
my @pieces = split /\\\"/, $in, -1;

foreach my $i (0 ... $#pieces) {
    next unless $i % 2;
    $pieces[$i] =~ s/\\s+/_/g;
}

my $out = join \'\"\', @pieces;
    
        就像是
s/\\\"([\\a\\w]*)\\\"/
应该与引用的块匹配。我的perl regex语法有些生疏,但不应该只是将引号文字放在要捕获的内容周围吗?然后,在第一个捕获组中添加了带引号的字符串first7ѭ,因此您可以执行任何操作...您要对带引号的字符串执行哪种“任意操作”? 嗯 您最好匹配带引号的字符串,然后将它们传递给另一个正则表达式,而不是全部合而为一。     

要回复问题请先登录注册