次のような配列があるとします。
$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という環境でやってます。
以上、よろしくお願いします。
変数$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系列だけにまずは注視されることを勧めます)
<?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しか頭にありませんでしたが、
こういうやりかたもあるんですね。
大変参考になりました。
ご回答ありがとうございます。
下のコメントも拝見しました。丁寧にありがとうございます。
僕にとって正規表現はまだまだ理解したいものですが、
今回のご回答で大変勉強になりました。