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

问题描述 投票:20回答:5

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

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

...作为可能的候选人被取代?

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

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

regex xhtml
5个回答
14
投票
(<img[^>]+)(?<!/)>

将匹配未正确关闭的img标签。它要求您使用的正则表达式支持后向支持(Ruby和JavaScript不支持,而大多数其他支持)。反向编号1将包含匹配项,因此,如果您搜索此正则表达式并替换为\1/>,则应该不错。

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

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

例如,这将匹配

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

然后离开

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

单独。


3
投票

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

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


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)

虽然后面看起来很酷


0
投票

您所说的“未封闭”到底是什么意思?

 <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

您可以try聪明地找到这样的嫌疑人,但我们永远不能保证自己是万无一失的。


-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" />
© www.soinside.com 2019 - 2024. All rights reserved.