php函数从字符串中提取链接
我想从文本或字符串中提取href链接。我编写了一个小函数来实现这一点,但当要转换的字符串很大时,这会很慢。我的代码是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
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匹配的所有模式。然而,这有点危险,因为它可能会删除比您期望的更多的内容。