gpt4 book ai didi

regex - Perl:用于条件替换的正则表达式吗?

转载 作者:行者123 更新时间:2023-12-04 16:44:49 24 4
gpt4 key购买 nike

在这个字符串中

ab<(CN)cdXYlm<(CI)efgXYop<(CN)zXYklmn<(CI)efgXYuvw<


我想用一个或两个替换 XY<之间的每个子字符串,具体取决于前括号之间的字符:

如果 XY之后的 (CN)ONE替换子字符串

如果 XY之后的 (CI)TWO替换子字符串

因此结果应为:

ab<(CN)cdONE<(CI)efgTWO<(CN)zONE<(CI)efgTWO<


XY和后面的字符应被替换,但尖括号 <不能被替换。

这是用于修改HTML, XY<之间可以出现任意字符。
我想我需要两个正则表达式用于(CN)和(CI)。

# This one replaces just all XY:   
my $s = 'ab<(CN)cdXYlm<(CI)efgXYop<(CN)zXYklmn<(CI)efgXYuvw<';
$s =~ s/(XY(.*?))</ONE/g;
# But how to add the conditions to the regex?

最佳答案

您不需要两个正则表达式。捕获C[NI]并从哈希中检索相应的替换值:

#!/usr/bin/perl
use warnings;
use strict;

my $s = 'ab<(CN)cdXYlm<(CI)efgXYop<(CN)zXYklmn<(CI)efgXYuvw<';

my %replace = (CN => 'ONE', CI => 'TWO');

$s =~ s/(\((C[NI])\).*?)XY.*?</$1$replace{$2}</g;

my $exp = 'ab<(CN)cdONE<(CI)efgTWO<(CN)zONE<(CI)efgTWO<';

use Test::More tests => 1;
is $s, $exp;

关于regex - Perl:用于条件替换的正则表达式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56992407/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com