while($row = mysql_fetch_row($result)){
preg_match('#<span id="lblNumerZgloszenia" style="font-weight:bold;font-style:italic;">([^<]*)<\/span>#',$row[1],$matches);
$query2 = 'UPDATE content_pl SET kategoria_data='.$matches[1].' WHERE id='.$row[0].';';
mysql_query($query2);
}我执行这个preg_match是为了将span内容放到$matches数组中。当我执行print_r($matches)时,它会显示正确的结果,但当我使用$matches[1]时,它的浏览器告诉我没有这样的索引。
编辑:print_r节目
[...]Array ( [0] => TOW: (210) 252250, (220) 01-07-2002 [1] => TOW: (210) 252250, (220) 01-07-2002 ) Array ( [0] => TOW: (210) 252251, (220) 01-07-2002 [1] => TOW: (210) 252251, (220) 01-07-2002 ) Array ( [0] => TOW: (210) 252252, (220) 01-07-2002 [1] => TOW: (210) 252252, (220) 01-07-2002 ) Array ( [0] => TOW: (210) 252253, (220) 01-07-2002 [1] => TOW: (210) 252253, (220) 01-07-2002 )[...]发布于 2012-12-10 01:07:07
这是在一个while循环中完成的,这意味着它可能会不止一次发生。如果你只是print_r($matches); exit;,你可能会注意到你得到了你想要的东西,但这只是你循环的一次迭代。
最有可能的是,至少有一种情况下您找不到任何匹配项。你应该用一个检查preg_match调用返回值的if语句来包装你的第二个mysql_query (它已经过时了,顺便说一句,如果你的项目很小,你可能想切换到PDO )。仅当preg_match返回>0时才运行查询
发布于 2012-12-10 01:09:20
让我向您展示一种比parsing HTML with regex更好的方法。Here is convenient library为您执行解析。这样代码就变得非常简单(并且可读):
$html = new simple_html_dom();
$html->load($row[1]);
$span = $html->find('span[id=lblNumerZgloszenia]', 0);
$data = $span->innertext;
$query2 = 'UPDATE content_pl SET kategoria_data='.$data.' WHERE id='.$row[0].';';如果由于某种原因不能使用第三方库,您可以使用built-in DOM module执行类似的操作。它将不会很优雅,但仍然更健壮和可读性更强。
https://stackoverflow.com/questions/13789531
复制相似问题