2012-02-09 8 views
0

私は正規表現について多くの知識がありません。私はリンクを検出するために、このコードを発見したか、PHPのテキストエリアからの分割URL

$url = 'this is just a link http://stackoverflow.com/ to test'; 
$text = preg_replace(" 
    #((http|https|ftp)://(\S*?\.\S*?))(\s|\;|\)|\]|\[|\{|\}|,|\"|'|:|\<|$|\.\s)#ie", 
    "'<a href=\"$1\" target=\"_blank\">$3</a>$4'", 
    $url 
); 
echo $text; 

出力テキストエリアで書かれているリンクを挿入するように言うことができる: これは

をテストするだけでリンクstackoverflow.comですが、私はへのリンクを分離する必要がありますそのテキスト領域からの変数。例えば、変数 $ var = http://stackoverflow.comのように、私はリンクで作業することができます。二段階で

答えて

2

ルーピング、str_replaceを経由してあなたのタグでURLに置き換わるあなたは試すことができますこのようにして:

$text = 'this is just a link http://stackoverflow.com/ to test'; 
$regex = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/"; 
if(preg_match($regex, $text, $url)) { // $url is now the array of urls 
    // here you should check $url content and length 
    echo $url[0]; // the first one in this case 
} 
else { 
    // no urls found 
} 
+0

auinoありがとうございます。わたしにはできる。ウイーノ – user1199426

0

試してみてください。

  • キャプチャURLのするpreg_matchやpreg_match_allと、&を指定すると、$パラメータ
  • と一致するマッチ
0

それぞれのマッチをキャプチャして置き換える前にさらに操作する場合は、pre_replace_callbackを使用するか、別の場所に保存してください。その正規表現を保存して後で一致させることもできます。私は文字列に複数のリンクを持つ可能性があり、マッチよりも自分のforループを実行するよりもクリーンなので、前者を使用します。