无法在PHP中使用正则表达式。只输出单词Array

时间:2011-07-04 12:39:31

标签: php

我无法在PHP中使用正则表达式来工作。它应该在网页上的标签之间获取字符串,但是当我尝试回应它时,我得到的全部是数组Array。

这是我正在使用正则表达式的文本。它是以字符串形式下载的网页的一部分。

<title>
HTC  Desire S
</title>

这是我用于正则表达式的代码。

while(!feof($list_of_phones))
{
      $phone = fgets($list_of_phones);
      $info = file_get_contents($phone);
      preg_match_all("/\/<title>(.*)<\/title>/", $info, $title, PREG_OFFSET_CAPTURE);
      echo $title[0];
}

4 个答案:

答案 0 :(得分:2)

请仔细阅读manual page。第三个参数填充了多维数组。您可以使用var_dump()检查变量。

答案 1 :(得分:1)

pre_match_all()

$matches始终是一个多维数组(通常是2级)。当您设置PREG_OFFSET_CAPTURE - 标志时,结果也会更深一层。

  

<强> PREG_OFFSET_CAPTURE   如果传递此标志,则对于每个发生的匹配,还将返回附加字符串偏移量。请注意,这会将匹配的值更改为一个数组,其中每个元素都是一个数组,该数组由偏移量为0的匹配字符串和偏移量为1的主体的字符串偏移量组成。

echo $title[0][0][0];

进一步调试:切勿使用echo,使用var_dump()print_r()。这将为您提供 更多信息,而不是echo

然后你使用这个正则表达式

/\/<title>(.*)<\/title>/

据我所知,这也需要在/之前\/(由<title>指定)。我不认为,这就是你想要的。 (当我们在这里选择不同的分隔符时,它更明显:~/<title>(.*)</title>~

答案 2 :(得分:0)

第一个问题:你的正则表达式中似乎有一个额外的斜杠:

/\/<title>(.*)<\/title>/
 ^^

不确定你为什么会那样,但我认为应该是这样:

/<title>(.*)<\/title>/

第二个问题:即使你做对了,$title[0]仍然是一个数组;您需要$title[0][0]来获取完整的<title>content</title>字符串,并$title[1][0]来获取<title>标记内的文字。

希望有所帮助。

答案 3 :(得分:0)

首先,正则表达式中似乎存在错误 - 即初始\/

其次,$title[0]不会包含您要查找的内容。将print_r(或类似内容)应用于$title,您就会看到哪些内容相关。