2011-07-21 5 views
1

から私は、文字列のPHPの配列を持っていることは、URLが、私はこれらのリンクの配列で必要なものの形のすべての種類になります。このリターンのURL PHPの文字列

Array 
(
    [1] => Lorem ipsum dolor sit amet http://www.google.com/search?q=stackoverflow consectetur adipiscing elit. 
    [2] => Phasellus tempor vehicula fringilla. www.google.com/search?q=stackoverflow&ie=utf-8 
    [3] => google.com/search?q=stackoverflow&ie=utf-8 Aenean in cursus libero. 
); 

のように見えます。このようなもの:

Array 
(
    [1] => http://www.google.com/search?q=stackoverflow 
    [2] => http://www.google.com/search?q=stackoverflow&ie=utf-8 
    [3] => http://www.google.com/search?q=stackoverflow&ie=utf-8 
); 
+0

インターネットの歴史の中で誰も文字列からURLを解析していたことがなく、そうするコードは一度も共有されていないと思いますか?良いニュース!それは完了しており、コードは数千回共有されています!あなたの最も近い検索ボックスに向かいます。 –

+1

重複しています。 http://stackoverflow.com/questions/1113840/php-remove-url-from-string これは参考になります。 –

+0

「google.com」で始まり「www.google.com」で始まる文字列は有効なURLではありません。すべての可能なバリエーションを抽出するのは難しく、あいまいです。 IMOでは、まずURLが有効であることを確認する必要があります。 – schneck

答えて

2

であなたのためのコードを見て:

$pattern = '/((https?|ftp)\:(\/\/)|(file\:\/{2,3}))?(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))|(((([a-zA-Z0-9]+)(\.)?)+)(\.)(com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum|[a-z]{2}))([\/][\/a-zA-Z0-9\.]*)*([\/]?(([\?][a-zA-Z0-9]+[\=][a-zA-Z0-9\%\(\)]*)([\&][a-zA-Z0-9]+[\=][a-zA-Z0-9\%\(\)]*)*))?/'; 

$a = array(
    'Lorem ipsum dolor sit amet http://www.google.com/search?q=stackoverflow consectetur adipiscing elit.', 
    'Phasellus tempor vehicula fringilla. www.google.com/search?q=stackoverflow&ie=utf-8', 
    'google.com/search?q=stackoverflow&ie=utf-8 Aenean in cursus libero.', 
); 

$urls = array(); 

foreach($a as $line) 
{ 
    if(!preg_match($pattern, $line, $match)) 
     continue; 

    $urls[] = $match[0]; 
} 

var_dump($urls); 

正規表現はhereから採取しビットを修正しました。

+0

すぐにお返事ありがとうございます! – Povylas

+0

このスクリプトをテストしたところ、弱点はほとんど見つかりませんでした。 - や_や?のような特別な記号がついてしまいます。 urlが.soom ends(.htmlを除く)を終了するとうまく処理できません – Povylas

0

これを達成するには、適切な正規表現を書く必要があります。 this