php函数从字符串中提取链接

php函数从字符串中提取链接,php,Php,我想从文本或字符串中提取href链接。我编写了一个小函数来实现这一点,但当要转换的字符串很大时,这会很慢。我的代码是 function spy_linkIntoString_Format($text) { global $inc_lang; $lang = $inc_lang['tlang_media']; $it = explode(' ' ,$text); $result = ''; foreach($it as $jt) { $a = tri

我想从文本或字符串中提取href链接。我编写了一个小函数来实现这一点,但当要转换的字符串很大时,这会很慢。我的代码是

function spy_linkIntoString_Format($text) {
    global $inc_lang; $lang = $inc_lang['tlang_media'];
    $it = explode(' ' ,$text);
    $result = '';
    foreach($it as $jt) {
        $a = trim($jt);
        if(preg_match('/((?:[\w\d]+\:\/\/)?(?:[\w\-\d]+\.)+[\w\-\d]+(?:\/[\w\-\d]+)*(?:\/|\.[\w\-\d]+)?(?:\?[\w\-\d]+\=[\w\-\d]+\&?)?(?:\#[\w\-\d]*)?)/', $jt)) {
            $pros_lis = str_replace('www.','',$jt);
            $pros_lis = (strpos($pros_lis, 'http://') === false ? 'http://'. $pros_lis : $pros_lis);
            $urlregx = parse_url($pros_lis);
            $host_name = (!empty($urlregx['host']) ? $urlregx['host'] : '.com');
            if($host_name == 'youtube.com') {
                $string_v = $urlregx['query']; parse_str($string_v, $outs); $stID = $outs['v'];
                $result .= '<a title="Youtube video" coplay="'.$stID.'" cotype="1" class="media_spy_vr5" href="#"><span class="link_media"></span>'.$lang['vtype_youtube'].'</a> ';
            } elseif($host_name == 'vimeo.com') {
                $path_s = $urlregx['path']; $patplode = explode("/", $path_s); $stID = $patplode[1];
                $result .= '<a title="Vimeo video" coplay="'.$stID.'" cotype="2" class="media_spy_vr5" href="#"><span class="link_media"></span>'.$lang['vtype_vimeo'].'</a> ';
            } elseif($host_name == 'travspy.com') {
                $result .= '<a href="'.$jt.'" title="'.$pros_lis.'" ><span class="jkt_445 jkt_3256 c8_big_corner"></span>'.$pros_lis.'</a> ';
            } else {
                $result .= '<a href="'.$jt.'" title="'.$pros_lis.'" rel="nofollow" target="_blank"><span class="jkt_445 c8_big_corner"></span>'.$pros_lis.'</a> ';
            }
        } else {
            $result .= $jt.' ';
        }
    }
    return trim($result);/**/
}
函数间谍链接到字符串格式($text){
全球$inc_lang;$lang=$inc_lang['tlang_media'];
$it=分解(“”,$text);
$result='';
foreach($jt){
$a=修剪($jt);
如果(预匹配('/(?:[\w\d]+\:\/\/)?(?:[\w\-\d]+\)+[\w\-\d]+(?:\/[\w\-\d]+)*(?:\/\.[\w\-\d]+)(?:\?[\w\-\d]+\=[\w\-\d]+\=[\w\-\d]+\?(?:\\\\\\\\\[\w\-\d]*)/),$jt)){
$pros_lis=str_replace('www.,'',$jt);
$pros_-lis=(strpos($pros_-lis,'http://')==false?'http://'。$pros_-lis:$pros_-lis);
$urlregx=解析url($pros_lis);
$host_name=(!empty($urlregx['host'])?$urlregx['host']:'.com');
如果($host_name==“youtube.com”){
$string_v=$urlregx['query'];parse_str($string_v,$outs);$stID=$outs['v'];
$result.='';
}elseif($host_name=='vimeo.com'){
$path_s=$urlregx['path'];$patplode=explode(“/”,$path_s);$stID=$patplode[1];
$result.='';
}elseif($host_name=='travspy.com'){
$result.='';
}否则{
$result.='';
}
}否则{
$result.=$jt.';
}
}
返回修剪($结果)/**/
}

我可以快速运行吗?

您应该重写它以使用
preg\u match\u all
,而不是将文本拆分为单词(即,删除
分解


您应该重写此命令,以使用
preg\u match\u all
,而不是将文本拆分为单词(即,删除
分解


您似乎正在将文本拆分为由空格分隔的单词,然后将每个单词与正则表达式进行匹配。这确实非常耗时。 一种更快的方法是对整个文本执行正则表达式搜索,然后迭代其结果

preg_match_all($regex, $text, $result, PREG_PATTERN_ORDER);
foreach($result[0] as $jt){
    //do what you normally do with $jt
}

您似乎正在将文本拆分为由空格分隔的单词,然后将每个单词与正则表达式进行匹配。这确实非常耗时。 一种更快的方法是对整个文本执行正则表达式搜索,然后迭代其结果

preg_match_all($regex, $text, $result, PREG_PATTERN_ORDER);
foreach($result[0] as $jt){
    //do what you normally do with $jt
}

这可以,但我想返回不包含链接的文本。如何使用regex执行此操作您可以执行preg_replace_all($regex,“,$text),这将删除与$regex匹配的所有模式。但是这有点危险,因为它可能会删除比您期望的更多的内容。这可以,但我想返回不包含链接的文本。如何使用regex执行此操作您可以执行preg_replace_all($regex,“,$text),这将删除与$regex匹配的所有模式。然而,这有点危险,因为它可能会删除比您期望的更多的内容。