要解析的否定前瞻 HTML
Negative lookahead to parse HTML
我有一个这样的模式:
/<img([^>]*?)(?!\sdata-src=([\'\"])[\S\h\v]*?)\ssrc=([\'\"])([\S\h\v]*?)/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]*?)\ssrc=([\'\"])([\S\h\v]*?)/i', '<img data-src= src=placeholder', $html);
echo $html;
>>> <img data-src="test'" src="placeholder"/><img data-src="abc" src="abc"/>
你的 ([^>]*?)
搞砸了。试试。
<img (?!data-src=['"])[^>]*?src=(['"])(.*?)
我有一个这样的模式:
/<img([^>]*?)(?!\sdata-src=([\'\"])[\S\h\v]*?)\ssrc=([\'\"])([\S\h\v]*?)/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]*?)\ssrc=([\'\"])([\S\h\v]*?)/i', '<img data-src= src=placeholder', $html);
echo $html;
>>> <img data-src="test'" src="placeholder"/><img data-src="abc" src="abc"/>
你的 ([^>]*?)
搞砸了。试试。
<img (?!data-src=['"])[^>]*?src=(['"])(.*?)