正则表达式跳到下一场比赛

时间:2011-12-06 23:36:29

标签: php regex

我正在使用PHP / Regex来解析应用程序的一些数据。我正在解析的页面具有表格格式,其中包含一个标题,后跟一堆项目。我想要做的是获取每个表的标题以及所有项目,以便我可以将每个项目标记为该组的一部分(由标题定义)。

我目前设置了一个表达式匹配每个标题,然后是一切到下一个标题。然后我在标题计数上使用循环来匹配第一个表达式中第二个匹配的附加数据。

基本上是这样的:

preg_match_all ('#table-header.*?>(.*?)<\/td>(.*?)table-header#s', $url, $gr, PREG_PATTERN_ORDER);

for($i = 0; $i < count($gr[0]); $i++) {
  preg_match_all ('#type_id.*?<b>(.*?)</b> ... #s', $gr[2][$i], $info, PREG_PATTERN_ORDER);
  $group = trim($gr[1][$i]);

  for($ii = 0; $ii < count($info[0]); $ii++) {
    $name = trim($info[1][$ii]);
    ...
   }
 }

我的问题是它正在跳过其他所有组,我只能假设是因为它将table-header与table-header匹配,然后跳到下一个table-header而不是与结束表开始下一个匹配 - 第一场比赛的头球。如何让它与上一场比赛的结束点开始下一场比赛?不幸的是,页面在开始/结束点附近没有足够的唯一项目来使用不同的东西来匹配。代码看起来类似于:

<td align='center' class='table-header' colspan='18' valign='top'>
    Header
</td>

...items...

<td align='center' class='table-header' colspan='18' valign='top'>
    Header 2
</td>

我尝试使用colspan作为表达式的开头,然后抓住所有内容到下一个表格标题,但它只是打破了。

感谢您的任何建议。

1 个答案:

答案 0 :(得分:0)

你应该看看这个类: http://simplehtmldom.sourceforge.net/