我有一个这样的字符串:
url.com/my?a=hello&b=world&z=foo
我需要删除a
andb
参数,但不是z
. 所以我正在使用以下最有效的正则表达式:
s#((?<=\?)|(&))(a|b)=\w*(?(2)((?=&)|$)|(&|$))##g
基本上,它检查a
orb
是否由?
(look-behind) or前置&
,并且它必须以&
字符串结尾或结尾。如果它&
在开始时匹配,它可能&
在最后匹配但不消耗它。
我遇到的问题是,如果它们是连续的,它匹配a
但不匹配b
,所以它导致:
url.com/my?b=world&z=foo
我猜在匹配a
位置之后已经超过了前一个匹配,所以它开始查看b=...
而没有再次看到后视字符?
,我怎样才能让它再次搜索,包括未使用的字符,或者我应该分开替换并独立搜索所有字符串?