首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >字符串中起始正则表达式和结束正则表达式之间的替换

字符串中起始正则表达式和结束正则表达式之间的替换
EN

Stack Overflow用户
提问于 2019-03-01 06:44:18
回答 1查看 110关注 0票数 1

我想在字符串中进行多次替换,但仅当在开始正则表达式和结束正则表达式之间时。例如:

代码语言:javascript
复制
$start = qr/a.*?b/;
$end = qr/c.*?d/;
$string = 'a1b x c2d x a345b qqxxxc678d xx abxcd';

perl代码将执行受限的s/x/y/g。它会将a.*?bc.*?d之间出现的所有x都更改为y,这样之后:

代码语言:javascript
复制
$string = 'a1b y c2d x a345b qqyyyc678d xx abycd'
EN

回答 1

Stack Overflow用户

发布于 2019-03-01 07:06:34

您可以使用修改后的/e执行代码(针对每个匹配项单独执行)来生成替换字符串:

代码语言:javascript
复制
use strict;
use warnings;

my $start_regex  = qr/a.*?b/;
my $end_regex    = qr/c.*?d/;
my $string = 'a1b x c2d x a345b qqxxxc678d xx abxcd';

$string =~ s/($start_regex)(.*?)($end_regex)/ my ($start_match, $middle_match, $end_match) = ($1, $2, $3); $middle_match =~ s!x!y!g; $start_match . $middle_match . $end_match /eg;

print $string, "\n";

将打印输出

代码语言:javascript
复制
a1b y c2d x a345b qqyyyc678d xx abycd

注意内部正则表达式中的替代正则表达式分隔符s!!!

将外部正则表达式匹配的$1$2$3存储在临时变量中很重要,因为当您在替换代码中执行另一个正则表达式时,它们将丢失。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54935455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档