if语句在preg_replace函数中

时间:2013-01-20 03:53:58

标签: php if-statement preg-replace

我遇到了如下划分字符串的麻烦: 什么是文本以保留文本什么是要在锚中转换的链接以及从youtube将其转换为iframe标记的链接是什么。

我的脚本如下所示:

$string='This is a link www.dinamomania.net this is a http://www.youtube.com/watch?v=U9LB6qGvdpQ';
echo makelink($string);

 function makeLink($string){

 /*** make sure there is an http:// on all URLs ***/
 $string = preg_replace("/([^\w\/])(www\.[a-z0-9\-]+\.[a-z0-9\-]+)/i", "$1http://$2",$string);
 /*** make all URLs links ***/

$string = preg_replace('/([\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/i','<a target="_blank" href="$1">$1</A>',$string);

$string = preg_replace('/((http|ftp)\:\/\/)?([w]{3}\.)?(youtube\.)([a-z]{2,4})(\/watch\?v=)([a-zA-Z0-9_-]+)(\&feature=)?([a-zA-Z0-9_-]+)?/', '<iframe style= "margin:15px 0 15px 0;display:block;" width="500" height="300" src="http://www.youtube.com/embed/$7" frameborder="0" allowfullscreen></iframe>',$string);

 /*** make all emails hot links ***/

 $string = preg_replace("/([\w-?&;#~=\.\/]+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}[0-9]{1,3})(\]?))/i","<A HREF=\"mailto:$1\">$1</A>",$string);

 return $string;

}

}

它所做的一切都是如此,我在iframe之前得到了一个像这样的“&gt;锚点,那是因为首先是链接到锚点,然后是youtube格式的iframe。所以它是一个锚点的框架

我正在寻找if语句来做这样的事情:

if( is link from youtube ) {
    // do the iframe part 
} else {
    // do the anchor part
}

任何帮助/建议都将受到高度赞赏。谢谢!

我有这样的事情:

    if (preg_match("/((http|ftp)\:\/\/)?([w]{3}\.)?(youtube\.)([a-z]{2,4})(\/watch\?v=)([a-zA-Z0-9_-]+)(\&feature=)?([a-zA-Z0-9_-]+)?/", $string))
    {
$string = preg_replace('/((http|ftp)\:\/\/)?([w]{3}\.)?(youtube\.)([a-z]{2,4})(\/watch\?v=)([a-zA-Z0-9_-]+)(\&feature=)?([a-zA-Z0-9_-]+)?/', '<iframe style= "margin:15px 0 15px 0;display:block;" width="500" height="300" src="http://www.youtube.com/embed/$7" frameborder="0" allowfullscreen></iframe>',$string);
    } else {
$string = preg_replace('/([\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/i','<a target="_blank" href="$1">$1</A>',$string);
    }

但又一次它正在做我的iframe部分而没有任何事情发生在锚点上。

2 个答案:

答案 0 :(得分:2)

对网址

使用此模式
preg_replace('/([^\'"])((ht|f)tps?:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/i',
    '$1<A target="_blank" href="$2">$2</A>',$string);

IFRAME置顶声明置于A代码发出声明之前。

    /*** make all the IFrame links ***/
$string = preg_replace(
'/((http|ftp)\:\/\/)?([w]{3}\.)?(youtube\.)([a-z]{2,4})(\/watch\?v=)([a-zA-Z0-9_-]+)(\&feature=)?([a-zA-Z0-9_-]+)?/', 
'<iframe style= "margin:15px 0 15px 0;display:block;" width="500" height="300" src="http://www.youtube.com/embed/$7" frameborder="0" allowfullscreen></iframe>',
$string);

/*** make all URLs links ***/
$string = preg_replace('/([^\'"])((ht|f)tps?:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/i',
        '$1<A target="_blank" href="$2">$2</A>',$string);

how it works

答案 1 :(得分:0)

您可以使用正则表达式方法:

if (preg_match("/http://(?:www\.)?youtu(?:be\.com/watch\?v=|\.be/)(\w*)(&(amp;)?[\w\?=]*)?/i", $link))
{
    // It's a Youtube link!
}

但也可以使用这种方法:

$parsedlink = parse_url($link);

if ($parsedlink['host'] == 'www.youtube.com')
{
    // It's a Youtube link!
}