Закрыть все закрытые HTML-теги IMG - PullRequest
19 голосов
/ 12 марта 2010

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

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

... как потенциальный кандидат на замену?

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

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

Ответы [ 4 ]

13 голосов
/ 12 марта 2010
(<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" />
одна

.

3 голосов
/ 12 марта 2010

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

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

0 голосов
/ 12 марта 2010

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

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

 <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

Вы можете попытаться разумно найти таких подозреваемых, но вы никогда не гарантируете защиту от дурака.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...