• ベストアンサー

正規表現 URL

過去ログを見ましたが 分からなかったので質問します。 $str = "hoge http://google.com foo http://yahoo.com one"; こんな感じの文字列から hoge http://google.com foo http://yahoo.com one を抜き出したいと思っています。 ちなみに URL と 単語 は可変で並び順もばらばらを想定しています。 こんなこと出来るのかわかりませんが よろしくお願いします。

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

  • ベストアンサー
  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.1

ここをご覧ください。 http://www.din.or.jp/~ohzaki/perl.htm#httpURL あとはここを見れば http://php.s3.to/man/function.preg-match-all.html preg_match_all ("/s?https?://[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+ /", $str, $matches); for ($i=0; $i< count($matches[0]); $i++) { echo "matched: ".$matches[$i][1]."\n"; } 今適当に作ったので動かないかも・・・ その場合は適当に修正してください。

参考URL:
http://www.din.or.jp/~ohzaki/perl.htm#httpURL,http://php.s3.to/man/function.preg-match-all.html
maruchan0488
質問者

お礼

アドバイスありがとうございます。 無事できました!! preg_match_all と言うものがあったのですね ずっと preg_match のほうを使っていて 何で1つしかマッチしないんだろうと悩んでいました、、、 ほとんど手を入れてませんが 少し直したので載せておきます。 if ( preg_match_all("/s?https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:@&=+$,%#]+/", $str, $matches)) { foreach( $matches as $value ) { for ($i=0; $i< count($value); $i++) { echo "matched: ".$value[$i]."\n"; } } }

その他の回答 (1)

  • sisya
  • ベストアンサー率39% (97/244)
回答No.2

例のようにかならず半角スペースがあるなら 下記のような感じで可能なのではないでしょうか? $vList = explode(" ", $str); foreach($vList as $Value){ print "$Value<br>\n"; }

maruchan0488
質問者

お礼

アドバイスありがとうございます。 ぐはっ 確かにそうですね。。。煮詰まりすぎて気が付きませんでしたorz スペースで単語を区切った後に URL かどうか判定すればよかったんですね

関連するQ&A