我的正则表达式很差,这是我的场景,
我正在尝试从包含多个表格的网页中提取一些信息,只有一些表格包含唯一的 url(比如说“very/unique.key”),所以它看起来像这样:
<table ....>
(bunch of content)
</table>
<table ....>
(bunch of content)
</table>
<table ....>
(bunch of content + "very/unique.key" keyword)
</table>
<table ....>
(bunch of content)
</table>
<table ....>
(bunch of content + "very/unique.key" keyword)
</table>
所以我想要的是提取所有包含“very/unique.key”关键字的表格内容。这是我尝试过的模式:
$pattern = "#<table[^>]+>((?!\<table)(?=very\/unique\.key).*)<\/table>#i";
这对我没有任何回报......
$pattern = "#<table[^>]+>((?!<table).*)<\/table>#i";
这将返回我从表 1 的打开标签<table...>
到最后一个表的关闭标签的所有内容,</table>
即使(?!<table)
条件...
感谢任何愿意帮助我的人,谢谢。
--编辑--
这是我找到的使用 DOM 循环遍历每个表的解决方案
--我的解决方案--
$index;//indexes of all the table(s) that contains the keyword
$cd = 0;//counter
$DOM = new DOMDocument();
$DOM->loadHTMLFile("http://uni.corp/sub/sub/target.php?key=123");
$xpath = new DomXPath($DOM);
$tables = $DOM->getElementsByTagName("table");
for ($n = 0; $n < $tables->length; $n++) {
$rows = $tables->item($n)->getElementsByTagName("tr");
for ($i = 0; $i < $rows->length; $i++) {
$cols = $rows->item($i)->getElementsbyTagName("td");
for ($j = 0; $j < $cols->length; $j++) {
$td = $cols->item($j); // grab the td element
$img = $xpath->query('./img',$td)->item(0); // grab the first direct img child element
if(isset($img) ){
$image = $img->getAttribute('src'); // grab the source of the image
echo $image;
if($image == "very/unique.key"){
echo $cols->item($j)->nodeValue, "\t";
$index[$cd] = $n;
if($n > $cd){
$cd++;
}
echo $cd . " " . $n;//for troubleshooting
}
}
}
echo "<br/>";
}
}
//loop that echo out only the table(s) that I want which contains the keyword
$loop = sizeof($index);
for ($n = 0; $n < $loop; $n++) {
$temp = $index[$n];
$rows = $tables->item($temp)->getElementsbyTagName("tr");
for ($i = 0; $i < $rows->length; $i++) {
$cols = $rows->item($i)->getElementsbyTagName("td");
for ($j = 0; $j < $cols->length; $j++) {
echo $cols->item($j)->nodeValue, "\t";
//proccess the extracted table content here
}
//echo "<br/>";
}
}
但就个人而言,我仍然对正则表达式部分感到好奇,希望任何人都可以找到解决这个问题的正则表达式模式。无论如何,感谢所有在这方面帮助/建议我的人(尤其是 AbsoluteƵERØ)。