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