gpt4 book ai didi

regex - 重用正则表达式中的后视字符进行多次连续替换

转载 作者:行者123 更新时间:2023-12-04 04:55:29 25 4
gpt4 key购买 nike

我有一个这样的字符串:

url.com/my?a=hello&b=world&z=foo



我需要删除 ab参数,但不是 z .所以我使用以下正则表达式,它主要有效:

s#((?<=\?)|(&))(a|b)=\w*(?(2)((?=&)|$)|(&|$))##g



基本上它会检查 ab前面加上 ? (后视)或 & ,并且必须以 & 结尾或成为字符串的结尾。如果匹配 &一开始,它可能匹配 &最后但不消耗它。

我的问题是它匹配 a但不适用于 b如果它们是连续的,那么结果是:

url.com/my?b=world&z=foo



我猜匹配后 a该位置超过了上一场比赛,因此它开始查看 b=...没有再次看到后视字符 ? ,我怎样才能让它再次搜索包括未使用的字符,或者我应该分开替换并独立搜索所有字符串?

最佳答案

use URI             qw( );
use URI::QueryParam qw( );

my $uri = 'http://url.com/my?a=hello&b=world&z=foo';

$uri = URI->new($uri);
$uri->query_param_delete($_) for qw( a b );

print "$uri\n"; # http://url.com/my?z=foo

关于regex - 重用正则表达式中的后视字符进行多次连续替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16819775/

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