0

次のことを行う最も簡単な方法は何でしょうか?

ランダム入力:

check out my new video here http://www.youtube.com/watch?v=123abc 
or here http://youtu.be/123abc
here is my new wallpaper http://somepage.com/fRDTk.jpg
and my new homepage http://google.com

出力:

check out my new video here 
<a class="youtube" href="http://www.youtube.com/watch?v=123abc">
http://www.youtube.com/watch?v=123abc</a>
or here 
<a class="youtube" href="http://youtu.be/123abc">
http://youtu.be/123abc</a>
here is my new wallpaper 
<a class="image" href="http://somepage.com/fRDTk.jpg">
http://somepage.com/fRDTk.jpg</a>
and my new homepage 
<a class="iframe" href="http://google.com">
http://google.com</a>

自動リンクし、リンクに応じて特定のクラスを追加する最も簡単な方法は何ですか?(画像、youtube、その他)

私はこれをすでにまとめましたが、惨めに失敗しました。

<?php
foreach ($imgur->captions->item as $comment) {
$co = $comment->caption;
$linkstring = preg_replace('/(http|ftp)?+(s)?:?(\/\/)?+(www.)?((\w|\.)+)+\.(com|org|net|mil|edu|COM|ORG|NET|MIL|EDU|be|info|co)+(\/)?(\S+)?/i', '<a rel="fancybox fancybox.iframe" href="\0">\0</a>', $co ); 
if(preg_match('/^http:\/\/(?:www\.)?(?:youtube.com|youtu.be)\/(?:watch\?(?=.*v=([\w\-]+))(?:\S+)?|([\w\-]+))$/i', $co, $vresult)) {
$pattern = "/(http|ftp)?+(s)?:?(\/\/)?+(www.)?((\w|\.)+)+\.(com|org|net|mil|edu|COM|ORG|NET|MIL|EDU|be|info|co)+(\/)?(\S+)?/i";
$replacement = '<a class="fancybox-media" href="\0">\0</a>';
$text = preg_replace($pattern, $replacement, $co);
          $type= 'youtube';
          }
elseif(preg_match('/(http(s?):)?([\/.|\w|\s])*\.(?:jpg|gif|png|jpeg|bmp)/i', $co, $vresult)) {
$pattern = "/(http|ftp)?+(s)?:?(\/\/)?+(www.)?((\w|\.)+)+\.(com|org|net|mil|edu|COM|ORG|NET|MIL|EDU|be|info|co)+(\/)?(\S+)?/i";
$replacement = '<a class="fancybox" href="\0">\0</a>';
$text = preg_replace($pattern, $replacement, $co);
          $type= 'image';
          }
else {
$pattern = "/(http|ftp)?+(s)?:?(\/\/)?+(www.)?((\w|\.)+)+\.(com|org|net|mil|edu|COM|ORG|NET|MIL|EDU|be|info|co)+(\/)?(\S+)?/i";
$replacement = '<a class="fancybox fancybox.iframe" href="\0">\0</a>';
$text = preg_replace($pattern, $replacement, $co);
$type = 'none';
}
echo "<div class=\"icomment\">
<p class=\"icomment\">&ldquo;",$text,"&rdquo; &#45;",$comment->author,"</p>
</div>";
}
?>

私はそれをたくさんいじり回していて、ただそれを捨てたいだけです。これを行うためのより簡単な方法があることを願っています。

4

1 に答える 1

0
$patterns = array(
  array('pattern'=>'/mypattern/','replaceWith'=>'myreplacement\0','addClass'=>'myclass'),
  array('pattern'=>'/mypattern/','replaceWith'=>'myreplacement\0','addClass'=>'myclass'),
);

foreach($patterns as $pattern) {
   // .... do your thing here... once... for every possibility described in array above.
}
于 2012-09-21T22:11:38.723 に答える