如何解决仅将正则表达式替换应用于带引号的部分
| 我需要应用正则表达式过滤以仅影响引号内的文本内容,而我感到困惑。 $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ѭ,因此您可以执行任何操作...您要对带引号的字符串执行哪种“任意操作”?
嗯
您最好匹配带引号的字符串,然后将它们传递给另一个正则表达式,而不是全部合而为一。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。