2016-12-16 5 views
-1

У меня есть образец подобного: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"/> 
+0

Пожалуйста, покажите ваш фактический вклад наряду с ожидаемым выходом. И регулярное выражение не является правильным инструментом для анализа HTML –

+0

@NarendrasinghSisodia Если вы хотите, чтобы я использовал DOMDocument или другие вещи, я скажу просто - нет. Я не могу полагаться на libxml. – Roomy

ответ

1

Ваш ([^>]*?) перепутались его. Пытаться.

<img (?!data-src=['"])[^>]*?src=(['"])(.*?)\1 

см https://regex101.com/r/wKQk4p/1

+0

, но он не будет работать, когда будут другие параметры перед 'src' (даже несобственные), поэтому я поместил' ([^>] *?) 'There – Roomy

+1

i обновил свой ответ ... и упростил ваше регулярное выражение. – Fallenhero

Смежные вопросы