人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Perlの置換で、変数を使った場合の後方参照が出来ません。
どうしたら良いでしょうか?


以下のコードで、

http://www.zzz.com/index.html

と表示させたい。

◆コード→
$key="/xxx/^(.*?)html";
$value="http://www.zzz.com/\1html";
$test = "/xxx/index.html";

$test =~ s/$key/$value/g;

print $test;

●質問者: tetlis
●カテゴリ:コンピュータ インターネット
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● Cherenkov
●10ポイント

コメントとまちがえて回答してしまいました。

なにをどうしたいのかわからないです。\1ではなくて$1でしょうか。


tetlisさんのコメント
> \1ではなくて$1でしょうか。 はい。 すいませんコードが間違えていました。 ◆修正コード→ $key="/xxx/(.*?)html"; $value="http://www.zzz.com/$1html"; $test = "/xxx/index.html"; $test =~ s/$key/$value/g; print $test; ◆ http://www.zzz.com/html となってしまう。 http://www.zzz.com/index.html と表示させたい。

2 ● うぃんど
●15ポイント

出来ないという証明は出来ませんが、
どこまで出来るかについて下記のようにテストしてみると良いでしょう
(エスケープが面倒だったのでセパレータは/ではなく!を宛がってます)

# (1)パターンが正しいかどうかの確認
$test = "/xxx/index.html";
$key="/xxx/^(.*?)html";
if ($test =~ m/$key/) { print "$key:OK\n" } else { print "$key:NG\n"; }
$key="/xxx/(.+?).html";
if ($test =~ m/$key/) { print "$key:OK\n" } else { print "$key:NG\n"; }
print "\n";

#(2)後方参照変数に格納されているかどうかの確認
$test = "/xxx/index.html";
$test =~ s!$key!http://www.zzz.com/$1html!g;
print $test;
print "\n";
$test = "/xxx/yyyy.html";
$test =~ s!$key!http://www.zzz.com/$1html!g;
print $test;
print "\n";

以下の点については修正・確認が必要です
・後方参照変数は$であって¥ではない
・$keyがおかしいから後方参照変数に格納されていなかった


tetlisさんのコメント
すいません。 「$test =~ s!$key!http://www.zzz.com/$1html!g;」は、 「$test =~ s!$key!$value!g;」としたいのです。 上記を参考にコードを修正したのですが、$valueで置換した場合は、やはり後方参照されませんでした。

3 ● MAS3
●15ポイント

直接置換するわけではないですけどこういう方法でどうでしょうか。

$key="/xxx/(.*?)html";
$value='http://www.zzz.com/%shtml';
$test = "/xxx/index.html";

$test =~ s/$key/sprintf $value, $1/eg;

print $test;

tetlisさんのコメント
欲しい内容とは違うのですが、後々役立ちそうです。 ありがとうございます。

4 ● TransFreeBSD
●60ポイント ベストアンサー

http://ideone.com/a1Sad

$key="/xxx/(.*?)html";
$value='"http://www.example.com/$1html"';
$test = "/xxx/index.html";
 
$test =~ s/$key/$value/eeg;
 
print $test;

こういう手も。バージョン依存は知らない。
あと、こういうときはexample.comを使うべき。


tetlisさんのコメント
うまくいきました!ありがとうございます。 そして、「example.com」を使うようにします。ご指導ありがとうございます。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ