Php 如何匹配没有前面文本的第一个图像元素?
我需要选择HTML字符串中的第一个图像标记,但前提是它没有前面的文本。例如,它应该与以下内容匹配: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>
<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);
打印(输出);