- ベストアンサー
phpの正規表現でURLを置換する方法
- phpで正規表現を使用してURLを置換する方法について説明します。
- 具体的には、変数に格納されたURLからドメイン部分を削除し、ファイルパス部分のみを残す方法です。
- これにより、任意のURLに対して一括で置換処理を行うことができます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
$pattern = '@https?://[\\w.-]++/index\\.html@'; $replacement = './index.html'; echo preg_replace($pattern, $replacement, $foo); こんな感じでどうぞ。 動作テスト: http://ideone.com/SnYdRq 他の方と差別化(?)するために心がけたポイント ・URL検出時に「/」をデリミタに使うとエスケープ地獄になるので無難な「@」を使う ・「+」の代わりに「++」を用いて無駄なバックトラックを回避 ・置換文字列が「./index.html」固定なので、無駄に()でキャプチャしない ・「\w」「\.」でも動作するが厳密に正しいは全てのバックスラッシュをエスケープした「\\w」「\\.」なのでこちらを採用。ちなみにPHP以外のほとんどの言語では「\w」「\.」と書くと「w」「.」と認識されてしまう。PHPだけ変態。 今回はシンプルに正規表現にしましたが、ユーザーの入力するテキストから厳密にURLを抽出したい場合はもっと複雑な正規表現になります。 TwitterのURL判定アルゴリズムにほぼ従っている正規表現 https://github.com/Certainist/TwitterText#urlregex
その他の回答 (2)
- t_ohta
- ベストアンサー率38% (5292/13827)
$foo = "http://www.google.co.jp/index.html と http://hoo.yahoo.jp/index.html と http://www2.aaaa.aaaa.me/index.htmlを置換"; $bar = preg_replace("/http:\/\/.*?\//", "./", $foo); echo $bar; って感じで。
- yambejp
- ベストアンサー率51% (3827/7415)
$pattern="|http:\/\/[a-zA-Z0-9\.]+?(\/index.html)|"; $replacement=".$1"; $bar=preg_replace($pattern,$replacement,$foo); みたいな感じで