我没有正则表达式的经验。我只是想找到一种方法来检测 并删除img标记之外的每个字符。换句话说,我想 从所有文本和标签中删除给定的HTML代码,并将所有内容保留在其中 img标签。结果应该只显示像这样的图像标签:
<img src="sourcehere">
有办法做到这一点吗?
更新: 我需要一个preg_replace中的正则表达式。 这就是我所做的,但它不起作用:
$buffer ="<html><head></head><body><img src='image.jpg'></body></html>";
$buffer = preg_replace('(?i)<(?!img|/img).*?>', '', $buffer);
echo $buffer; /* should output <img src='image.jpg'> but it doesn't */
答案 0 :(得分:0)
这不需要是一些大而且花哨的正则表达式。
<img[^>]*>
这匹配文本“”后跟更接近的“&gt;”。
获得匹配后,您只想将匹配写入字符串或文档,或者您想要代表它们。
编辑:
要完成OP在PHP中显示的内容,您需要调用match而不是replace。您实际上不需要替换所有不匹配的部分。你可以保留结果:
$buffer ="<html><head></head><body><img src='image.jpg'></body></html>";
preg_match("/<img[^>]*>/", $buffer, $matchArray);
foreach ($matchArray as $match){
echo $match;
}
打印出来:
<img src='image.jpg'>
编辑:
我在尝试更换其他所有标签时遇到的问题是当标签之间有内容时。如果您不关心这一点,那么这里有一些使用preg_replace()的方法。
$buffer ="<html><head></head><body><img src='image.jpg'></body></html>";
$buffer = preg_replace('/(?i)<\\/*(?!img)[^>]*>/', '', $buffer);
echo $buffer; /* outputs <img src='image.jpg'> */
答案 1 :(得分:0)
您的计划是什么?您想将其记录到文件中,还是仅在控制台中显示,或以某种方式输出。这对我有用,但实际上“串联”它可能需要额外的工作。
this is jQuery. From my understanding you want to remove everything but the images from your document.
var arr2 = Array.prototype.slice.call( document.images );
jQuery('body').contents().remove();
for(i = 0; i < arr2.length;i++){
jQuery('body').append(arr2[i])
}