次のコードがあります。
#!/usr/bin/perl
use strict;
use warnings;
use URI qw( );
my @insert_words = qw( HELLO );
while (<DATA>) {
chomp;
my $url = URI->new($_);
my $path = $url->path();
for (@insert_words) {
# Use package vars to communicate with /(?{})/ blocks.
my $insert_word = $_;
local our @paths;
$path =~ m{
^(.*/)([^/]*)((?:/.*)?)\z
(?{
push @paths, "$1$insert_word$2$3";
if (length($2)) {
push @paths, "$1$insert_word$3";
push @paths, "$1$2$insert_word$3";
}
})
(?!)
}x;
for (@paths) {
$url->path($_);
print "$url\n";
}
}
}
__DATA__
http://www.bagandboxfactory.com/index.php?route=checkout/
http://www.stackoverflow.com/dog/cat/rabbit/
http://www.superuser.co.uk/dog/cat/rabbit/hamster/
現時点では、上記のコードは のstackoverflow and superuser
URL に対して完全に機能し__DATA__
ます。stackoverflow
URLに対して次の出力が得られます。
http://www.stackoverflow.com/dog/cat/rabbit/HELLO
http://www.stackoverflow.com/dog/cat/HELLOrabbit/
http://www.stackoverflow.com/dog/cat/HELLO/
http://www.stackoverflow.com/dog/cat/rabbitHELLO/
http://www.stackoverflow.com/dog/HELLOcat/rabbit/
http://www.stackoverflow.com/dog/HELLO/rabbit/
http://www.stackoverflow.com/dog/catHELLO/rabbit/
http://www.stackoverflow.com/HELLOdog/cat/rabbit/
http://www.stackoverflow.com/HELLO/cat/rabbit/
http://www.stackoverflow.com/dogHELLO/cat/rabbit/
ご覧のとおりHELLO
、スラッシュ (/) に遭遇すると、特定の場所に文字列が挿入されます。
私が抱えている問題:
URLに等号(=)が見つかったときに同じことが起こるようにしたい。
例として使用http://www.bagandboxfactory.com/index.php?route=checkout
すると、出力で次のようになります。
http://www.bagandboxfactory.com/index.php?route=HELLOcheckout/ <- puts HELLO before the string after the equals
http://www.bagandboxfactory.com/index.php?route=HELLO/ <- replaces the string after the equals with HELLO
http://www.bagandboxfactory.com/index.php?route=checkoutHELLO/ <- puts HELLO after the string that is after the equals
正規表現を
^(.*/)([^/]*)((?:/.*)?)\z
に
^(.*[/=])([^/=]*)((?:[/=].*)?)\z
動作しますが、動作しません。
これを行うには、正規表現に何を変更する必要がありますか?
あなたの助けは大歓迎です、どうもありがとう
__更新_ _ _
複数のパラメーターを処理できる必要があります。たとえば、URL がある場合、http://www.example.com/dog/cat=2&foo=5
取得する出力は次のようになります。
http://www.example.com/HELLOdog/cat=2&foo=5
http://www.example.com/HELLO/cat=2&foo=5
http://www.example.com/dogHELLO/cat=2&foo=5
http://www.example.com/dog/cat=HELLO2&foo=5
http://www.example.com/dog/cat=HELLO&foo=5
http://www.example.com/dog/cat=2HELLO&foo=5
http://www.example.com/dog/cat=2&foo=HELLO5
http://www.example.com/dog/cat=2&foo=HELLO
http://www.example.com/dog/cat=2&foo=5HELLO
私がすでに持っているコードは正しく動作し、URL に含まれるすべてのスラッシュに対してこれを実行しますが=
、URL に含まれる(または正規表現で指定することを選択した他の文字) ときにも実行する必要があります。例 [/=@-])。