解析链接,除了src =“”内的链接

时间:2011-04-26 01:30:32

标签: php regex pattern-matching

我得到了以下代码,用相应的链接替换了URL:

$in = array
(
        '/(?:^|\b)((((http|https|ftp):\/\/)|(www\.))([\w\.]+)([,:%#&\/?=\w+\.-]+))(?:\b|$)/is'
);
$out = array
(
        "<a href=\"$1\" target=\"_blank\">$1</a>"
);
return preg_replace($in, $out, $url);

但是,我不希望SRC =“url”属性中的URL被转换为链接。

如何从此模式中排除属性中包含的URL?

更新 输入将是:

Bellow you can see http://www.yahoo.com bla bla
<iframe src="http://yahoo.com"></frame

需要解析第一个链接,而不是src =“”

中的URL

1 个答案:

答案 0 :(得分:0)

使用此php代码提取除src=""

以外的链接
<?php
   $p = '/((<)(?(2).*?src=[^>]*>).*?)*?((?:(?:(?:http|https|ftp):\/\/)|(?:www\.))(?:[\w\.]+)(?:[,:%#&\/?=\w+\.-]+))/smi';

   // multi-line input text
   $str = 'Visit http://www.google.com bla bla <iframe src="http://apple.com">
           </frame> Bellow you can see http://www.ibm.com bla bla';

   preg_match_all($p, $str, $m);
   var_dump( $m[3] );
?>

输出:

array(2) {
  [0]=>
  string(21) "http://www.google.com"
  [1]=>
  string(18) "http://www.ibm.com"
}


SUGGESTION:

我认为最好通过使用以下正则表达式排除src=""<中包含的所有链接,而不是为>提取链接。

$p = '/((<)(?(2)[^>]*>)(?:.*?))*?((?:(?:http|https|ftp):\/\/|www\.).*?[,:%#&\/?=\w+\.-]+)/smi';