• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:phpの正規表現)

phpの正規表現でURLを置換する方法

このQ&Aのポイント
  • phpで正規表現を使用してURLを置換する方法について説明します。
  • 具体的には、変数に格納されたURLからドメイン部分を削除し、ファイルパス部分のみを残す方法です。
  • これにより、任意のURLに対して一括で置換処理を行うことができます。

質問者が選んだベストアンサー

  • ベストアンサー
noname#244856
noname#244856
回答No.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)
回答No.2

$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)
回答No.1

$pattern="|http:\/\/[a-zA-Z0-9\.]+?(\/index.html)|"; $replacement=".$1"; $bar=preg_replace($pattern,$replacement,$foo); みたいな感じで

関連するQ&A