我无法在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];
}
答案 0 :(得分:2)
请仔细阅读manual page。第三个参数填充了多维数组。您可以使用var_dump()检查变量。
答案 1 :(得分:1)
$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
,您就会看到哪些内容相关。