2

次のような文字列があります。

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

abパラメータを削除する必要がありますが、削除する必要はありませんz。だから私はほとんどが動作する次の正規表現を使用しています:

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

基本的に、 or の前に(後読み) aorbが追加されていることを確認し、文字列で終わるか、文字列の終わりである必要があります。最初に一致した場合、最後に一致する可能性がありますが、消費しません。?&&&&

私が抱えている問題は、それらが連続している場合は一致しますaが、一致しないためb、次のようになります。

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

位置を一致させaた後、前の一致を過ぎているため、後b=...読み文字を再度表示せずに検索を開始?すると思います。消費されていない文字を含めて再度検索するにはどうすればよいですか、または置換を分離してすべての文字列を個別に検索する必要があります?

4

1 に答える 1

3
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
于 2013-05-29T17:04:28.773 に答える