- ベストアンサー
正規表現 URL
過去ログを見ましたが 分からなかったので質問します。 $str = "hoge http://google.com foo http://yahoo.com one"; こんな感じの文字列から hoge http://google.com foo http://yahoo.com one を抜き出したいと思っています。 ちなみに URL と 単語 は可変で並び順もばらばらを想定しています。 こんなこと出来るのかわかりませんが よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ここをご覧ください。 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"; } 今適当に作ったので動かないかも・・・ その場合は適当に修正してください。
その他の回答 (1)
- sisya
- ベストアンサー率39% (97/244)
例のようにかならず半角スペースがあるなら 下記のような感じで可能なのではないでしょうか? $vList = explode(" ", $str); foreach($vList as $Value){ print "$Value<br>\n"; }
お礼
アドバイスありがとうございます。 ぐはっ 確かにそうですね。。。煮詰まりすぎて気が付きませんでしたorz スペースで単語を区切った後に URL かどうか判定すればよかったんですね
お礼
アドバイスありがとうございます。 無事できました!! 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"; } } }