• ベストアンサー

URL正規表現

現在会員制サイトを作成しており http://sample.com/USER_ID/ のようなユーザーIDを含むURLを取得したいと思っています。 USER_ID 半角英数字(ハイフンアンダーバーを含む)の文字列の正規表現の記述をご教授いただけるとありがたいです。

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

  • ベストアンサー
  • kikanbo
  • ベストアンサー率31% (44/139)
回答No.5

そのURLは所有者が存在するので例示として使ってはいけない 使ってよいのはexample.com preg_match("/^https?:\/\/example\.com\/([a-z0-9_\-]+)\/$/i",$url,$match); $match[1]がユーザーID サブディレクトリがあるなら$は不要 aaaaaaaaaaaaaaaaaaaaaaaahttpになっていても通るから eden3616さんの回答は不完全 -は特殊文字だから Ogre7077さんの回答は若干間違い 各回答は example9comでも通るから間違い

gardens64
質問者

お礼

すいません。URL確認しないで掲載してしまいました。 意図した動作になりました。 ありがとうございました。

その他の回答 (4)

  • Ogre7077
  • ベストアンサー率65% (170/258)
回答No.4

$s = 'わたしの URL は xttp://example.com/my_pow-530k/ です.'; $r = '#\bxttp://example.com/([A-Za-z0-9_-]+)/(?:\s|$)#'; preg_match_all($r, $s, $mm, PREG_SET_ORDER); foreach ($mm as $m) { echo "user id: {$m[1]}\n"; }

gardens64
質問者

お礼

一応意図した動作になりました。 細かくコードを記述いただきありがとうございました。

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.3

No2で「}」が貼付漏れてますね。 $str = "http://sample.com/USER_ID/"; if (preg_match ("/http:\/\/sample\.com\/(USER_ID)\//",$str,$matched)) { echo $matched[1]; }

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.2

>「http://sample.com/」の部分は固定で「USER_ID」の部分を取得したい $str = "http://sample.com/USER_ID/"; if (preg_match ("/http:\/\/sample\.com\/(USER_ID)\//",$str,$matched)) { echo $matched[1]; $matched[1] で "USER_ID" が表示されます。

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.1

(https?|ftp):\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+\/USER_ID\/ USER_IDのところは固定文字にするのか、パターンにするのかは適切に変更願います。 http://www.lightship.co.jp/FileVisor6/help/operation/regexp.htm 正規表現ではメタ文字は特殊な意味合いを持っていますので、 []を使うか、先頭に「\」をつけてエスケープしないとパターン文字列として利用できません。 http://www.ipentec.com/document/document.aspx?page=web-url-invalid-char あとはURLに使用可能・不可能などを判断してパターンに記述すればよいかと。

gardens64
質問者

補足

eden3616様 ご回答ありがとうございます。 「http://sample.com/」の部分は固定で 「USER_ID」の部分を取得したい思っています。 例えば会員「tester_1」の個人ページを http://sample.com/tester_1/ で表示したいと思っています。

関連するQ&A