php高手请进:正则提取超链接中的网址和标题,如果兼顾有双引号和单引号或没有引号的超链接?
发布网友
发布时间:2022-04-23 09:09
我来回答
共3个回答
热心网友
时间:2023-10-09 02:56
<?php
$text = "递归是一种函数调用自身的机制。这是一种强大的特性可以把某些复杂的东西变得很简单。<a href='http://mp3.baidu.com'>MP1</a><a href=http://mp3.baidu.com>MP2</a><a href='http://mp3.baidu.com' target='_blank'>MP3</a><a href=http://mp3.baidu.com target=mainFrame>MP4</a><a href=http://mp3.baidu.com style=\"font-size:32px;color:#e53333;\">MP5</a><a href=\"http://mp3.baidu.com\">MP6</a>";
preg_match_all('/<a href=(.*)>(.*)<\/a>/isU',$text,$data_arr);
foreach( $data_arr[1] as $key=>$val ) {
$replace_str = $data_arr[0][$key];
$title = $data_arr[2][$key];
preg_match("/(https?|ftp|mms):\/\/([A-z0-9]+[_\-]?[A-z0-9]+\.)*[A-z0-9]+\-?[A-z0-9]+\.[A-z]{2,}(\/.*)*\/?/",$val,$url_data);
$url = $url_data[0];
$text = str_replace($replace_str,"<br/>\n{$title} {$url}",$text);
}
var_mp($text);
?>
这个可以识别得了网址中包含http开头的链接地址格式的。但如果还需匹配相对地址,建议是将所有可能出现的情况一一替换掉追问复制来的东西没用哦,请实际测试可行后再提供,谢谢!
追答你运行下就知道了,不是复制过来的。
热心网友
时间:2023-10-09 02:56
把里面的"用\"代替,'用\'代替追问与你说的无关,详细看问题哦,谢谢
热心网友
时间:2023-10-09 02:57
/<a\s+href=["|\']?([^>"\' ]+)["|\']?\s*[^>]*>([^>]+)<\/a>/i