我有html像这样的底部。并使用PHP
<table style="...">
<tbody>
<tr> <img id="foo" src="foo"/></tr>
</tbody>
</table>
<p> ....</p>
<table style="...">
<tbody>
<tr> <img id="bar" src="bar"/></tr
</tbody>
</table>
我正在开始使用PHP。
我想找到特定的表,例如img src或id等于foo
或bar
。
但选择了两个表。
这是我的正则表达式
1.查找表具有img标签
/<table.*?>.*?<img *.*?<\/table>/
->选择2张桌子
2.add img src
<table.*?<img.+(src=.*?foo).*?<\/table>
->从第一个标签到最后一个标签全部选中
3.so尝试在...标记之间不要包含</table>
。
<table.*?(?!<\/table>).*?<img.+(src=.*?foo).*?<\/table>
->相同的结果 我不知道怎么了! 我使用preg_match_all()解决了,但仍然想知道preg_match() 有什么想法吗?
谢谢!
答案 0 :(得分:2)
这项工作非常适合使用PHP DOMDocument
和DOMXPath
类。在这种情况下,我们使用xpath搜索具有table
且其img
属性等于src
或'foo'
的后代是'bar'
的{{1}} :
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$footable = $xpath->query("//table[descendant::img[@src='foo']]");
echo $footable->item(0)->C14N() . "\n";
$bartable = $xpath->query("//table[descendant::img[@src='bar']]");
echo $bartable->item(0)->C14N() . "\n";
输出:
<table style="..."><tbody><tr><img id="foo" src="foo"></img></tr></tbody></table>
<table style="..."><tbody><tr><img id="bar" src="bar"></img></tr></tbody></table>