我有這樣一個規律:負前瞻解析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