我得到了以下代码,用相应的链接替换了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="
使用以下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"
}
建议:
与其将src=""
作为提取链接的例外,我认为最好使用以下regex排除<
和>
中包含的所有链接:
$p = '/((<)(?(2)[^>]*>)(?:.*?))*?((?:(?:http|https|ftp):'/'/|www'.).*?[,:%#&'/?='w+'.-]+)/smi';