php高手请进:正则提取超链接中的网址和标题,如果兼顾有双引号和单引号或没有引号的超链接?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php高手请进:正则提取超链接中的网址和标题,如果兼顾有双引号和单引号或没有引号的超链接?相关的知识,希望对你有一定的参考价值。
$text = preg_replace('/<a href=\\"(.*)\\">(.*)<\/a>/isU',"$2 $1",$text);
这样的正则能提取<a href="超链接"> 文本 </a>
但有的超链接中有单引号或双引号,有的没有,举例如下:
<a href= '超链接 '> 文本 </a>
<a href= '超链接 ' target='_blank' > 文本 </a>
<a href="超链接"> 文本 </a>
<a href= "超链接" target="_blank"> 文本 </a>
<a href=超链接> 文本 </a>
<a href= 超链接 > 文本 </a>
<a href="超链接" style="font-size:32px;color:#e53333;"> 文本 </a>
请问正则如何写,能提取所有 有双引号或单引号或没有引号的超链接中的网址和广本?
思路:
<a(这里考虑到可能有多个空格,或者有 target="" style=""等)href=(这里考虑到 双引号 单引号 没引号)超链接网址(这里按href=后第一个空格)(这里任何字符,比如 target= style=等)> (文本)</a>
$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_dump($text);
?>
这个可以识别得了网址中包含http开头的链接地址格式的。但如果还需匹配相对地址,建议是将所有可能出现的情况一一替换掉追问
复制来的东西没用哦,请实际测试可行后再提供,谢谢!
追答你运行下就知道了,不是复制过来的。
参考技术B 把里面的"用\"代替,'用\'代替追问与你说的无关,详细看问题哦,谢谢
参考技术C /<a\s+href=["|\']?([^>"\' ]+)["|\']?\s*[^>]*>([^>]+)<\/a>/i本回答被提问者采纳以上是关于php高手请进:正则提取超链接中的网址和标题,如果兼顾有双引号和单引号或没有引号的超链接?的主要内容,如果未能解决你的问题,请参考以下文章