我有这段文字,我想从中提取链接。有些链接与有标签,有些将在那里,就这样,以普通的格式。但我也有图像,我不想要他们的链接。
如何从这段文字中提取链接,但忽略图像链接。所以基本上和google.com都应该是提取的。
string(441) "<p class="fr-tag">Please visit https://www.google.co.uk/?gfe_rd=cr&ei=9P2DVaW2BMWo8wfK74HYCg and this <a href="https://www.google.co.uk/?gfe_rd=cr&ei=9P2DVaW2BMWo8wfK74HYCg" rel="nofollow">link</a> should be filtered and this http://d.pr/i/1i2Xu <img class="fr-fin fr-tag" alt="Image title" src="https://cft-forum.s3-us-west-2.amazonaws.com/uploads%2F1434714755338-Screen+Shot+2015-06-19+at+12.52.28.png" width="300"></p>"我尝试了以下几点,但不完整:
$dom = new DOMDocument();
$dom->loadHTML($html);
$tags = $dom->getElementsByTagName('a');
foreach ($tags as $tag) {
$hrefs[] = $tag->getAttribute('href'); 发布于 2015-06-19 13:42:43
仅使用这一个字符串来测试,下面的内容对我来说是有效的:
$str = '<p class="fr-tag">Please visit https://www.google.co.uk/?gfe_rd=cr&ei=9P2DVaW2BMWo8wfK74HYCg and this <a href="https://www.google.co.uk/?gfe_rd=cr&ei=9P2DVaW2BMWo8wfK74HYCg" rel="nofollow">link</a> should be filtered and this http://d.pr/i/1i2Xu <img class="fr-fin fr-tag" alt="Image title" src="https://cft-forum.s3-us-west-2.amazonaws.com/uploads%2F1434714755338-Screen+Shot+2015-06-19+at+12.52.28.png" width="300"></p>';
preg_match('~a href="(.*?)"~', $str, $strArr);使用a href ="."在preg_match()语句中返回一个数组,$strArr包含两个值,两个链接到preg_match()。
Array
(
[0] => a href="https://www.google.co.uk/?gfe_rd=cr&ei=9P2DVaW2BMWo8wfK74HYCg"
[1] => https://www.google.co.uk/?gfe_rd=cr&ei=9P2DVaW2BMWo8wfK74HYCg
)发布于 2015-06-19 13:33:53
我会尝试这样的方法。
查找并删除图像标记:
$content = preg_replace("/<img[^>]+\>/i", "(image) ", $content); 找到并收集网址。
preg_match_all('#\bhttps?://[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/))#', $content, $match);输出Urls:
print_r($match);祝好运!
发布于 2015-06-19 15:42:58
我玩了更多的这一点,并有一个可能更适合的答案,你正试图做一些“未来的打样”。
$str = '<p class="fr-tag">Please visit www.google.co.uk/?gfe_rd=cr&ei=9P2DVaW2BMWo8wfK74HYCg and this <a href="https://www.google.co.uk/?gfe_rd=cr&ei=9P2DVaW2BMWo8wfK74HYCg" rel="nofollow">link</a> should be filtered and this http://d.pr/i/1i2Xu <img class="fr-fin fr-tag" alt="Image title" src="https://cft-forum.s3-us-west-2.amazonaws.com/uploads%2F1434714755338-Screen+Shot+2015-06-19+at+12.52.28.png" width="300"></p>';
$str = str_replace(' ',' ',$str);
$strArr = explode(' ',$str);
$len = count($strArr);
for($i = 0; $i < $len; $i++){
if(stristr($strArr[$i],'http') || stristr($strArr[$i],"www")){
$matches[] = $strArr[$i];
}
}
echo "<pre>";
print_r($matches);
echo "</pre>";我回过头来分析您的字符串,并注意到如果您将 转换为空格,则可以将字符串转换为数组,然后逐步完成,如果任何元素包含http或www,则将它们添加到$matches数组中,以便稍后处理。输出非常干净,易于使用,而且您还可以以这种方式消除大多数html标记。
值得注意的是,这可能不是最好的方法。除了您提供的字符串之外,我还没有用任何其他字符串进行测试,因此可以进行优化。
https://stackoverflow.com/questions/30939368
复制相似问题