У меня есть образец подобного:Negative опережения разобрать HTML
/<img([^>]*?)(?!\sdata-src=([\'\"])[\S\h\v]*?\2)\ssrc=([\'\"])([\S\h\v]*?)\3/igm
И вот что я хочу добиться:
<img src="test'"/> # this should be matched, and it is
<img data-src="abc" src="abc"/> # this one shouldn't be matched, but it is
Я не понимаю, почему мой отрицательный-предпросмотр не работает - как вы можете видеть, я не хочу, чтобы параметр data-src
отображался перед параметром src
.
Чтобы проверить мои выражения, я использую regex101, и мой пример основан на нем. Я буду использовать это регулярное выражение в PHP.
Чтобы удовлетворить PHP сообщества:
$html = '<img src="test\'"/><img data-src="abc" src="abc"/>';
$html = preg_replace('/<img([^>]*?)(?!\sdata-src=([\'\"])[\S\h\v]*?\2)\ssrc=([\'\"])([\S\h\v]*?)\3/i', '<img$1 data-src=$3$4$3 src=$3placeholder$3', $html);
echo $html;
>>> <img data-src="test'" src="placeholder"/><img data-src="abc" src="abc"/>
Пожалуйста, покажите ваш фактический вклад наряду с ожидаемым выходом. И регулярное выражение не является правильным инструментом для анализа HTML –
@NarendrasinghSisodia Если вы хотите, чтобы я использовал DOMDocument или другие вещи, я скажу просто - нет. Я не могу полагаться на libxml. – Roomy