プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
PHP、テキストからURLを抽出する
結論から言えば

preg_match_all('(https?://[-_.!~*\'()a-zA-Z0-9;/?:@&=+$,%#]+)', 元テキスト, 結果(抽出URL)配列)

で抽出できます。

それでは経緯と詳細を以下につらつらっと書いていきまする。

とあるテキスト群からURLを抽出したいという要望が出てきました。
「りょうかいで~す。さくさくっと作っちゃいま~す。」と
ゆるい感じで作ったサンプルがこちらφ(--)

<?php

//元テキスト
$text = <<< EOT
■マコトのおもちゃ箱 ~ぼへぼへ自営業者の技術メモ~:
http://piyopiyocs.blog115.fc2.com/

■ITの万屋 PCS - Piyopiyo Create Service 【基本情報】
 ぴよぴよhttp://i-3-i.info/index.html?mode=c02&hoge=hogeぴよぴよ

■「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
ほげほげhttp://wa3.i-3-i.info:80/ほげほげ

うんちゃらかんちゃら
EOT;

//元テキスト表示
print "■■■元テキスト■■■<br>";
print mb_ereg_replace('\r\n', '<br>', $text);
print '<br><br>';

//URL抽出
print "■■■抽出URL■■■<br>";
if(preg_match_all('(https?://[-_.!~*\'()a-zA-Z0-9;/?:@&=+$,%#]+)', $text, $result) !== false){
    foreach ($result[0] as $value){

        //URL表示
        print $value . '<br>';
    }
}


?>

サンプルの実行結果がこちらφ(--)

■■■元テキスト■■■
■マコトのおもちゃ箱 ~ぼへぼへ自営業者の技術メモ~:
http://piyopiyocs.blog115.fc2.com/

■ITの万屋 PCS - Piyopiyo Create Service 【基本情報】
 ぴよぴよhttp://i-3-i.info/index.html?mode=c02&hoge=hogeぴよぴよ

■「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
ほげほげhttp://wa3.i-3-i.info:80/ほげほげ

うんちゃらかんちゃら

■■■抽出URL■■■
http://piyopiyocs.blog115.fc2.com/
http://i-3-i.info/index.html?mode=c02&hoge=hoge
http://wa3.i-3-i.info:80/

「preg_match_all」を使って、テキストを正規表現で検索しているだけです。
URL抽出で悩むのは正規表現の書き方でしょうかね。

今回は……と言うか、今まで

'(https?://[-_.!~*\'()a-zA-Z0-9;/?:@&=+$,%#]+)'

な正規表現で抽出してトラブル報告を受けたことがないので、そのまま使い続けています。

'/https?:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:@&=+$,%#]+/'

でも同じ結果になりますけどね。

もし「このパターンのURLだとおかしくならね?」のような不具合があれば
メールででも教えてくださいm(__)m

そんな感じ(--)ノ
URLの正規表現以外は特に悩むところ無いですよね(--?
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:● PHP  thema:システム開発 - genre:コンピュータ  Posted by ササキマコト 

  関連記事