Подтвердить что ты не робот

Закрыть все скрытые IMG-теги HTML

Можно ли заменить регулярное выражение на все теги IMG, которые закрыты? Если да, то как бы я определил:

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

... в качестве потенциального canidate для замены?

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

Обновление. У нас есть сотни страниц и тысячи тегов изображений, все из которых должны быть закрыты. Я не зацикливаюсь на RegEx - любой другой метод, помимо ручного обновления всех тегов IMG, будет достаточным.

4b9b3361

Ответ 1

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

будет соответствовать тегу img, который неправильно закрыт. Это требует, чтобы используемое вами выражение regex поддерживает lookbehind (в котором Ruby и JavaScript не работают, но большинство других). Backreference no. 1 будет содержать совпадение, поэтому, если вы ищете это регулярное выражение и замените на \1/>, вам должно быть хорошо идти.

Если вам нужно учитывать возможность > внутренних атрибутов, вы можете использовать

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

Это будет соответствовать, например,

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

и оставьте

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

один.

Ответ 2

В HTML конечный тег для <img> "должен быть опущен", поэтому начальный тег закрывает элемент, и вы не можете иметь незакрытый img.

Если вы хотите преобразовать свой HTML в XHTML, используйте реальный синтаксический анализатор. Регулярные выражения - не очень хороший инструмент для этой работы.

Ответ 3

Что именно вы подразумеваете под "незакрытыми"?

 <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

Я никогда не пробовал это, но закрытый тег 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" />