Php 如何匹配没有前面文本的第一个图像元素?

Php 如何匹配没有前面文本的第一个图像元素?,php,html,regex,Php,Html,Regex,我需要选择HTML字符串中的第一个图像标记,但前提是它没有前面的文本。例如,它应该与以下内容匹配: <p><span><a href=""><img src="some.jpg"></a></span></p> <p>Text text text<span><a href=""><img src="some.jpg"></a></span>

我需要选择HTML字符串中的第一个图像标记,但前提是它没有前面的文本。例如,它应该与以下内容匹配:

<p><span><a href=""><img src="some.jpg"></a></span></p>
<p>Text text text<span><a href=""><img src="some.jpg"></a></span></p>

但它不应与此相匹配:

<p><span><a href=""><img src="some.jpg"></a></span></p>
<p>Text text text<span><a href=""><img src="some.jpg"></a></span></p>
文本

这也不是:

<p><span>Text text text<a href=""><img src="some.jpg"></a></span></p>
文本

我试过这样的方法:

/(<[^>]+>)<img/is
/(]+>)可能是这样的

$str = '
<p><span><a href=""><img src="some1.jpg"></a></span></p>
<p><span>Text text text<a href=""><img src="some2.jpg"></a></span></p>
<p><span>Text text text<a href=""><img src="some3.jpg"></a></span></p>
<p><span><a href=""><img src="some4.jpg"></a></span></p>';

preg_match_all('#<p>\s*<span>\s*<a.*(<img[^>]+>)#U', $str, $match);

echo '<pre>' . htmlspecialchars(print_r($match, 1)) . '</pre>';
$str='1〕

文本文本文本

文本文本文本

'; preg#U match#U all('#\s*\s*)#U',$str,$match); 回显“”。htmlspecialchars(打印($match,1))”;
正则表达式解决方案:

int(1)
int(0)
int(0)
$content = strip_tags($yourContent, '<p><img>');
preg_match_all("#<p>(<img[^>]+>)#U", $content, $out);
print_r($out);

编辑

DOM/XPath解决方案:

int(1)
int(0)
int(0)
$content = strip_tags($yourContent, '<p><img>');
preg_match_all("#<p>(<img[^>]+>)#U", $content, $out);
print_r($out);
foreach(数组('

'), “Text

”, “Text

”)作为$html) { $dom=新的DOMDocument(); $dom->loadHTML($html); $xpath=newdomxpath($dom); var_dump($xpath->query('//img[字符串长度(//text())
$content=strip_标记($yourContent,);
preg#U match_all(“#(]+>)#U“,$content,$out);
打印(输出);