【问题标题】:Extracting data form website using php使用php提取数据表单网站
【发布时间】:2013-05-31 12:02:04
【问题描述】:

我有以下网站: http://stationmeteo.meteorologic.net/metar/your-metar.php?icao=LFRS&day=070308

我想从中提取数据。 我尝试使用 file_get_contents 和一些正则表达式,但有些东西不起作用。

这是我尝试过的代码:

$content=file_get_contents('http://stationmeteo.meteorologic.net/metar/your-metar.php? icao=LFMN&day=010513');

preg_match('/00\:30 07\/03\/2008(.+)01\:30 07\/03\/2008/',$content,$m);
echo $m[0];
echo $m[1];

它给了我未定义的偏移量 0 和 1。 如果我将网页的内容直接复制到 $content 而不是使用 file_get_contents,它可以正常工作。

我错过了什么?

【问题讨论】:

  • 当你使用file_get_contents(...)时,你在$content中得到了什么?
  • 你没有得到匹配,因为没有与00:00 01/05/2013匹配的时间戳?
  • 抱歉我把日期设置错了,我的意思是,00:30 07/03/2008 和 01:30 07/03/2008
  • file_get_contents 是否返回了一些东西?
  • 是的,如果我回显$content,它将返回网站的内容。

标签: php regex


【解决方案1】:

问题是.+ 匹配除换行符以外的任何字符,并且您要匹配的文本中有换行符。

试试

preg_match('~00:30 07/03/2008(.+)01:30 07/03/2008~s',$content,$m);

(顺便说一句,使用~ 作为分隔符,这样您就不必转义所有这些斜线)

下一个问题是:为什么我把网页内容直接复制到$content时没有这个问题?好吧,当呈现网页时,所有空格都被规范化为单个空格,将页面源代码中存在的\n(按Ctrl-U 查看)变成了一个简单的空格。 .+ 匹配那个空格。

【讨论】:

  • 好的,现在我明白发生了什么。和 thx 用于 ~ 分隔符提示。 (真的很有帮助)
猜你喜欢
  • 2015-06-09
  • 1970-01-01
  • 1970-01-01
  • 2013-01-06
  • 1970-01-01
  • 1970-01-01
  • 2019-04-17
  • 2015-08-26
  • 2020-06-14
相关资源
最近更新 更多