Действительно ли возможно сделать замену regex на всех тегах img, которые открыты? Если так, как был бы я определять:
<img src="..." alt="...">
... как потенциал canidate, чтобы быть замененным?
= <img src="..." alt="..."/>
Обновление: у Нас есть сотни страниц и тысячи тегов изображения, все должны, которых должен быть закрыт. Я не застреваю на RegEx - любой другой метод, кроме ручного обновления всех тегов img, был бы достаточен.
(<img[^>]+)(?<!/)>
будет соответствовать тегу img
, который не закрыт должным образом. Для этого требуется, чтобы используемый вами вариант регулярного выражения поддерживал просмотр назад (чего нет в Ruby и JavaScript, но есть в большинстве других). Обратной ссылки нет. 1 будет содержать совпадение, поэтому, если вы выполните поиск этого регулярного выражения и замените его на \ 1 />
, все будет в порядке.
Если вам нужно учесть возможность >
внутри атрибутов, вы можете использовать
(<img("[^"]*"|[^>])+)(?<!/)>
Это будет соответствовать, например,
<img src="image.gif" alt="hey, look--->">
<img src="image/image.gif">
и оставить
<img src="image/image.gif" />
в покое.
В HTML конечный тег для
«должен быть опущен», поэтому начальный тег закрывает элемент, и у вас не может быть незакрытого img.
Если вы хотите преобразовать ваш HTML в XHTML, используйте настоящий парсер. Регулярные выражения - не очень хороший инструмент для этой работы.
Я никогда не пробовал этого, но закрытый тег 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";
}
}
Produces:
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" />
Что именно вы подразумеваете под «незакрытой»?
<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
Вы можете попытаться разумно найти таких подозреваемых, но вы никогда не гарантируете, что будете надежными.