我知道这是可能的,但是对于我一生,我无法解决。
考虑这种情况:
$html = '<tr>
<td>Some Marker I know<td>
<td>This is what I want</td>
<tr>
因此preg_match类似于:
preg_match_all( '#Some Marker I know<td><td>(.*?)</td>#', $html, $match );
但是我不确定某些事情,因此需要一些可以提高灵活性的设计
示例:
$html = '<tr class='unknown another' id='no idea'>
<td attribute='no idea' class='no idea'>Some Marker I know<td>
<label>This is what I want</label>
<tr>
注意,我已更改: -类和ID-可能存在或可能不存在 -html标签-可能不是TD(可能是DIV),但始终是下一个。
所以要弄清楚我想得到的是字符串“这就是我想要的”
在英语中,搜索词的含义类似于:
我知道这不是最简单的例子,但是我很确定您可以在其中使用通配符来帮助它。
谢谢!
答案 0 :(得分:2)
在PHP中处理HTML的首选方法是使用DomDocument
类。将HTML读入DomDocument后,即可使用DomXPath
进行搜索。在这种情况下,我们要搜索具有文本值Some Marker I know
的元素之后的元素。的XPath是
//*[text()="Some Marker I know"]/following-sibling::*
我们可以像这样在PHP中使用它:
$html = "<tr class='unknown another' id='no idea'>
<td attribute='no idea' class='no idea'>Some Marker I know<td>
<label>This is what I want</label>
<tr>";
$doc = new DomDocument;
$doc->loadHTML($html);
$xpath = new DomXPath($doc);
$marker = $xpath->query('//*[text()="Some Marker I know"]/following-sibling::*');
echo(trim($marker[0]->nodeValue));
输出:
This is what I want