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

PHPの正規表現を用いて下記のスクリプトを作成してください。

次のような配列があるとします。
$url = array(
'http://www.yahoo.co.jp',
'http://q.hatena.ne.jp',
'http://www.google.co.jp'
);

「http://q.hatena.ne」を含む要素の最後尾に
「/hoge」を追加するというスクリプトを作成してください。

つまり、$urlは下記のとおりになるということです。
$url = array(
'http://www.yahoo.co.jp',
'http://q.hatena.ne.jp/hoge',
'http://www.google.co.jp'
);

Vista、PHP、Firefoxという環境でやってます。
以上、よろしくお願いします。

●質問者: taroemon
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:firefox hoge PHP URL VISTA
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● kn1967
●60ポイント

変数$urlの中身が質問どおりの形式を保つのであれば

 $url = array(
 'http://www.yahoo.co.jp',
 'http://q.hatena.ne.jp',
 'http://www.google.co.jp',
 );
 $url = preg_replace("/^(http:\/\/q.hatena.ne.jp)$/i","$1/hoge",$url);
 print_r($url);

で結果としては

Array
(
 [0] => http://www.yahoo.co.jp
 [1] => http://q.hatena.ne.jp/hoge
 [2] => http://www.google.co.jp
)

となりますし

$url = str_replace('http://q.hatena.ne.jp','http://q.hatena.ne.jp/hoge',$url);

でも同じ結果を得られますが

実際には末尾がスラッシュで終わっていたり

サブディレクトリが存在していたりといった事もあるかと思いますので

 $url = array(
 'http://q.hatena.ne.jp/fuga/',
 'http://q.hatena.ne.jp/fuga/fuga/',
 'http://q.hatena.ne.jp/fuga',
 'http://www.yahoo.co.jp',
 'http://q.hatena.ne.jp',
 'http://www.google.co.jp',
 'http://q.hatena.ne.jp/'
 );
 $url = preg_replace("/^(http:\/\/q.hatena.ne.jp)((\/[^\/]+)*)\/*?$/i","$1$2/hoge",$url);
 print_r($url);

として結果は

Array
(
 [0] => http://q.hatena.ne.jp/fuga/hoge
 [1] => http://q.hatena.ne.jp/fuga/fuga/hoge
 [2] => http://q.hatena.ne.jp/fuga/hoge
 [3] => http://www.yahoo.co.jp
 [4] => http://q.hatena.ne.jp/hoge
 [5] => http://www.google.co.jp
 [6] => http://q.hatena.ne.jp/hoge
)

のようにしたほうが良いかと・・・。

(同様にereg系でも可能ですが、全般的にpreg系のほうが高速と言われてますし

php流の正規表現とperl流の正規表現を同時期に覚えていくのは面倒ですから

個人的にはpreg系列だけにまずは注視されることを勧めます)

◎質問者からの返答

ご回答ありがとうございます。

下のコメントも拝見しました。丁寧にありがとうございます。

僕にとって正規表現はまだまだ理解したいものですが、

今回のご回答で大変勉強になりました。


2 ● y-kawaz
●25ポイント
<?php
$url = array(
'http://www.yahoo.co.jp',
'http://q.hatena.ne.jp',
'http://www.google.co.jp'
);

foreach($url as $key => $value) {
 if(preg_match('/http:\/\/q\.hatena\.ne/', $url)) {
 $url[$key] .= '/hoge';
 }
}
?>
◎質問者からの返答

ご回答ありがとうございます。

preg_replaceしか頭にありませんでしたが、

こういうやりかたもあるんですね。

大変参考になりました。

関連質問


●質問をもっと探す●



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