我有这段文字,我想从中提取链接。一些链接有标签,有些链接就像那样,用普通格式。但我也有图像,我不想要他们的链接。
如何从这段文本中提取链接但忽略图像链接。所以基本上和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');
答案 0 :(得分:1)
我会尝试这样的事情。
查找和删除图片标记:
$content = preg_replace("/<img[^>]+\>/i", "(image) ", $content);
查找并收集网址。
preg_match_all('#\bhttps?://[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/))#', $content, $match);
输出网址:
print_r($match);
祝你好运!
答案 1 :(得分:1)
只使用那一个字符串进行测试,以下内容适用于我:
$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
包含两个值,这两个链接指向谷歌。
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
)
答案 2 :(得分:-1)
我更多地玩这个并且有一个答案可能更适合你想要做的事情&#34;未来的证明&#34;
$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>";
我回去分析了你的字符串并注意到如果你将
翻译成空格,那么你可以explode
将字符串放入一个数组中,逐步执行该操作,如果有任何元素包含{{1} }或http
然后将它们添加到www
数组中以便稍后处理。输出非常干净,易于使用,你也可以通过这种方式摆脱大部分的html标记。
需要注意的是,这可能不是最好的方法。我没有使用任何其他字符串进行测试,但是您提供的字符串是可以完成的。