• ベストアンサー

正規表現 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/245)
回答No.2

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

maruchan0488
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 正規表現で置換

    その1 $str = "ほげほげほげ<a href="http://xxxx.xxxx.xxx/xxxx/">ほげほげほげ</a>ほげほげ<br /><br /><img src="http://yyy.hoge.jp/hage/hige/xxxx.jpg" width="320" height="240" />ほげほげ"; ↓ $str = "ほげほげほげ<a href="http://xxxx.xxxx.xxx/xxxx/">ほげほげほげ</a>ほげほげ<br /><br /><img src="./foo/faa/fii/xxx.jpg" width="320" height="240" />ほげほげ"; その2 $str = "<img src="http://yyy.hoge.jp/hage/hige/xxxx.jpg" width="320" height="240" />ほげほげほげ<a href="http://xxxx.xxxx.xxx/xxxx/">ほげほげほげ</a>ほげほげ<br /><br /><img src="http://yyy.hoge.jp/hage/hige/xxxx.jpg" width="320" height="240" />ほげほげ"; ↓ $str = "<img src="./foo/xxxx.jpg" width="320" height="240" />ほげほげほげ<a href="http://xxxx.xxxx.xxx/xxxx/">ほげほげほげ</a>ほげほげ<br /><br /><img src="./foo/faa/fii/xxx.jpg" width="320" height="240" />ほげほげ"; このような文字列があった時に、次のように従って置換したいです。 1.imgのタグの内部に、「http://yyy.hoge.jp/hage/hige/xxx.jpg」という文字列があった場合、「./foo/faa/fii/xxx.jpg」という文字列に置き換える。 2.それ以外のURLの場合は置換しない。 3.その1とその2では「xxx.jpg」となっていますが、jpg以外の拡張子の場合も存在する。 4.日本語とURLの位置や個数はバラバラです。 5.URLの中のxxxとyyyは不定の文字列で、hage、hoge、hige、foo、faa、fiiは固定です。 6.使用している言語はPHPです。正規表現を1度だけでできれば理想的ですが、今回は2回に渡った処理でも問題ありません。 以上です。正しく処理できる正規表現、あるいは下記の正規表現の誤りを教えて頂ければ幸いです。 お手数ですが、よろしくお願い致します。 下記の方法では、うまくできませんでした。 $pattern = "/http:\/\/.*?hoge.jp\//"; $replacement = "./"; $str= preg_replace($pattern, $replacement, $str); $pattern2 = '/\/?hage\/hoge/'; $str = preg_replace($pattern2, '/foo/faa/fii', $str);

    • ベストアンサー
    • PHP
  • 変数内のURL文字列を置換させたい

    変数に格納した文字列のうち、URLを以下のようにして 置換しようとしましたが、置換されませんでした。 $html = str_replace("www.sample.com/hoge", "hoge.hogeoge.net", $html); str_replace の使い方が間違っているのでしょうか。 どうぞ宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • phpの正規表現

    $foo = "http://www.google.co.jp/index.html と http://hoo.yahoo.jp/index.html と http://www2.aaaa.aaaa.me/index.htmlを置換" この変数を ./index.html と ./index.html と ./index.htmlを置換 というふうに置換するにはどのように書けばよいでしょうか? 今回は一例として 「http://www.google.co.jp/index.html」 「http://hoo.yahoo.jp/index.html」 「http://www2.aaaa.aaaa.me/index.html」 の3つのURLを使用しましたが、http:// ~ /index.html の間は不定でどのドメイン(サブドメインも含む)でも対応できるようにしたいです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • URLの一部をコピーできるブックマークレット

    後述のようなブックマークレットを作りたいのですが、 ブックマークレットを作ったことがなくまったくわかりません。 どなたか、どんなブックマークレットになるかお教えいただけませんでしょうか? --------------------------------------------------------------------- どこかのページを表示中に、そのブックマークレットをクリックすると、 ●そのURLのFQDNより後ろの部分だけをクリップボードにコピーし、 ●コピーしたら「(そのコピーした部分)をコピーしました」とJavaScriptの確認アラートを表示させたいです。 --------------------------------------------------------------------- 例1) 「http://www.example.com/foo.html」 ↓ ●「/foo.html」をコピーする ●『foo.html をコピーしました』とJSで確認アラートが出る。 例2) 「http://www.example.com/foo/bar/hoge/fuga.html」 ↓ ●「/foo/bar/hoge/fuga.html」をコピーする ●『/foo/bar/hoge/fuga.html をコピーしました』とJSで確認アラートが出る。 ※なお、FQDNは固定です(ここでは仮に、www.examepl.comとしてますが) --------------------------------------------------------------------- 以上、よろしくお願い申し上げます。

  • 静的URL変換について

    現在,phpでウェブサイトを作成しているのですが、 サイト内検索をしたときのURLを静的化できないか、考えております 例)getで送った際のURL hoge.com/search.php?keyword=hoge 修正後 hoge.com/kewyword_hoge.php そして、その際にやりたいことは、hoge.com/kewyword_hoge.phpをインデックスさせ このURLのページにアクセスしてきたときにhoge.com/search.php?keyword=hogeを 実行するようにしたいのですが、これって可能でしょうか? 静的URL変換自体は問題ないのですが、 hoge.com/kewyword_hoge.phpにアクセスしてもhoge.com/search.php?keyword=hoge を実行してくれず困っております。 恐れ入りますが、解決策をご教授いただけませんでしょうか? 何卒宜しくお願いします。 また、私のやりたいことは以下のサイトで参考になります。 ■インデックスされているURL(google) http://j-sen.jp/kanto/keyword_%E3%81%86%E3%81%A9%E3%82%93.htm ■サイト内検索のURL http://j-sen.jp/search/?area=kanto&nmin%5Bname%5D=&nmin%5Btime%5D=&nmin%5Bn%5D=&wage=&freeword=%E3%81%86%E3%81%A9%E3%82%93&day=&hour=&feature%5B%5D=&feature%5B%5D=&medical=1&except_medical=0&x=82&y=22 どちらも検索結果は同じですが、サイト内検索のURLを静的化し、 google先生にインデックスさせています。 お手数ですが、改めて解決策のご教授お願い申し上げます。

    • 締切済み
    • PHP
  • excel2007マクロで特定URLを抽出したい

    初めてお世話になります。 Excel2007のマクロについて質問です。 【元ファイル】 1行目:見出し1 2行目:http://yahoo.com/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.jp 1行目:見出し2 2行目:http://google.com/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.jp 1行目:見出し3 2行目:http://oshiete.com/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.jp 1行目:見出し4 2行目:http://yahoo.co.jp/oshiete/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.jp 1行目:見出し5 2行目:http://google.com/aaa/oshiete.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com 上記のような形式の数十行のテキストファイル (アウトルックのメール本文からメモ帳などに張り付けを想定)が素材です。 【ご質問】 上記のような2行ごとのテキストの中から「oshiete」を含むURLのみを エクセルのG列、その直上の見出しをエクセルのF列に書き込んでいきたいのですが、 どのようなマクロを書けばよろしいでしょうか。 特徴としてはURL部分がかなり長いです。可変ですが、半角で130~140文字くらいあります。 途中切れなどがないようにしたいと考えております。 この作業は日次で繰り返し、excelファイルは1週間単位で新しいものを作成します。 可能であれば、B列あたりに 書き込み日時(yyyy/mm/dd)も持たせられれば最高です。。 excelの関数や操作などはそこそこ理解できるのですが、マクロは全くの初心者です。 詳しい方にご教示いただければ大変うれしく思います。 よろしくお願いいたします。

  • VIMの正規表現を使った検索について

    初めまして。 VIMの正規表現の使用方法について教えて頂けないでしょうか。 単語検索の際に、正規表現を使用したいと思っているのですが、どうも上手く使うことができません。 まずは、単純な物で練習しようと考え、Vim完全バイブル(技術評論社)の正規表現のページに書かれてある 「tからはじまって”ing”で終わる全ての語句(正規表現=\<t[^]*ing\>)」を試してみようと、 hoge aaa testing foo という風に文字列を準備して、上記コマンド(通常モードから"/"を押して\<t[^]*ing\>)を入力してみたのですが、 「該当箇所はありません」と表示され単語にマッチすることがありませんでした。 この場合どのようにすれば良いか教えていただけないでしょうか? 使用しているVimのバージョンは、Kaoriya版Vim7.2です。 magicオプションはオンです。 以上、よろしくお願いします。

  • RewriteRuleで動的URLを静的URLに見せたい

    ご存知の方がいらっしゃいましたら、 ご指導いただきたいと思っています。 http://example.com/hoge.do?itemNo=123456(以下"A") という動的URLのリンクを http://example.com/hoge/123456(以下"B") という静的URLに見えるようなリンクに変えようと思っています。 そして、 "B"にアクセスした場合"A"の内容をブラウザに表示しつつ、 ブラウザのURL欄を"B"のままにしたいと思っています。 そこで、httpd.confに以下の設定をして、"B"にアクセスしたところ・・・ 1行目 RewriteEngine on 2行目 RewriteRule ^/hoge/(.*)$ /hoge.do?itemNo=$1 「Web ページがみつかりません(HTTP 404 )」 が帰ってきてしまいます。 そこで試しに httpd.confの設定を以下のように変えて、"B"にアクセスしたところ・・・ 2行目 RewriteRule ^/hoge/(.*)$ /hoge.do?itemNo=$1 ↓ 2行目 RewriteRule ^/hoge/(.*)$ /hoge.do?itemNo=$1 [R] "A"の内容をブラウザに表示され、ブラウザのURL欄は"A"のままとなってしまいます。 どのようにしたら、本来の想定どおりの動きができるのか? 何か他の設定がおかしいのか? どなたか心当たりがあればヒントをください。 どうかよろしくお願いします。

  • urlを変数に入れたい。

    掲示板のコメント欄にURLが記入された場合は、一番初めに書き込まれたURLを変数に格納したいのですが、方法が考えつけません。 以下の書込み内容の場合で例えますと、 -------------------------------------------------- あいうえおhttp://hoge.com/かきくけこhttp://hoge.jp/ さしすせそhttp://hoge.net/たちつてと -------------------------------------------------- $FORM{'comment'}から一番初めに書き込まれた文字列 (http\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%]+) を抽出して、変数に格納。 $url = 'http://hoge.com/'; このような感じです。 お手数ですが、宜しくお願いいたします。

    • ベストアンサー
    • Perl
  • 下層ディレクトリのwwwあり・なしの統一について

    お世話になります。 現在.htaccessを利用し、利用中のURLのwwwあり・なしの設定を行い、 www.hoge.comへのアクセスをhoge.comへ統一させる事に成功致しました。 ですがwww.hoge.com/foo/へのアクセスがhoge.com/foo/に統一されず、困っております。 ドメイントップ内.htaccessにて以下の様に表記を行っております。 RewriteEngine on RewriteCond %{HTTP_HOST} ^(www\.hoge\.com)(:80)? RewriteRule (.*) http://hoge.com/$1 [R=301,L] これに、 RewriteCond %{HTTP_HOST} ^(www\.hoge\.com/foo/)(:80)? RewriteRule (.*) http://hoge.com/foo/$1 [R=301,L] 等加えてみましたがどうも思う様にいきません。 /foo/直下に.htaccessを置き試してみましたが統一されないままです。 現在さくらインターネットのレンタルサーバにて設置作業を行っております。 どの様にすれば下層ディレクトリでのwwwありなしの統一が行えますでしょうか? どうぞご教示の程お願い致します。