关闭所有HTML未关闭的IMG标记

时间:2010-03-12 15:39:56

标签: regex xhtml

是否可以在所有未关闭的IMG标签上进行正则表达式替换?如果是这样,我将如何识别:

  <img src="..." alt="...">

......作为潜在的候选人被替换?

   = <img src="..." alt="..."/>

更新:我们有数百个页面和数千个图像标签,所有这些标签都必须关闭。我不会停留在RegEx上 - 除了手动更新所有IMG标签之外,任何其他方法都足够了。

5 个答案:

答案 0 :(得分:13)

(<img[^>]+)(?<!/)>

将匹配未正确关闭的img代码。它要求你正在使用的正则表达式支持lookbehind(Ruby和JavaScript不会,但大多数其他人都这样做)。反向引用号1将包含匹配项,因此如果您搜索此正则表达式并替换为\1/>,那么您应该很高兴。

如果您需要考虑>内部属性的可能性,可以使用

(<img("[^"]*"|[^>])+)(?<!/)>

这将匹配,例如,

<img src="image.gif" alt="hey, look--->">
<img src="image/image.gif">

并离开

<img src="image/image.gif" />

单独

答案 1 :(得分:3)

在HTML中,必须省略<img>“的结束标记”,因此start标记会关闭元素,并且您不能拥有未关闭的img。

如果您想将HTML转换为XHTML,请使用真正的解析器。正则表达式不是这项工作的好工具。

答案 2 :(得分:1)

要替换所有未关闭的IMG标签:

content = "text<img src='img.jpg'>text<img src='img.png' >text"
content = re.sub('(<img.*?)>', r'\1/>', content, count=0)
print(content)

后面看起来很酷

答案 3 :(得分:0)

“unclosed”究竟是什么意思?

 <img src="a1.jpg    <--no ending quotes and end parens
 <img src="a1.jpg"   <-- no end parens
 <img src="a1.jpg">  <-- the tag does not self-close as should be done in XHTML

你可以尝试智能地找到这样的嫌疑人,但你永远不能保证是万无一失的。

答案 4 :(得分:-1)

我从未尝试过这个,但是一个封闭的img标记是一个以<img开头的标记,其中包含内容,最后是/>

这是我在perl中尝试过的东西

!/usr/bin/env perl

my @images = ('<img src="toto.jpg">',
          '<img src="truc/machin.jpg" title="pouet" >',
          '<img        src="pouet.jpg" alt="toto" />',
          '<img src="math/a-greater-than-b.png" alt="a > b">');

foreach (@images) {
    if (/<img\s+(([a-z]+=".*?")+\s*)>/) {
    print "Match : <img $1 />\n";
    }
}

产地:

Match : <img src="toto.jpg" />
Match : <img src="truc/machin.jpg" title="pouet"  />
Match : <img src="math/a-greater-than-b.png" alt="a > b" />