正则表达式检测<img/>标记之外的所有字符

时间:2014-02-18 03:43:31

标签: html regex

我没有正则表达式的经验。我只是想找到一种方法来检测 并删除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 */

2 个答案:

答案 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])
}