【发布时间】:2013-11-11 17:14:50
【问题描述】:
我有一个简单的数据格式,如下所示:
stuff/stuff/stuff
一个例子是:
data/test/hello/hello2
为了检索某条数据,可以使用我的解析器,它会尝试执行以下操作:
在data/test/hello/hello2
您要检索data/test(即hello)下的数据。我的解析器代码如下:
function getData($data, $pattern)
{
$info = false;
$dataLineArray = explode("\n", $data);
foreach($dataLineArray as &$line)
{
if (strpos($line,$pattern) !== false) {
$lineArray = explode("/", $line);
$patternArray = explode("/", $pattern);
$iteration = 0;
foreach($lineArray as &$lineData)
{
if($patternArray[$iteration] == $lineData)
{
$iteration++;
}
else
{
$info = $lineData;
}
}
}
}
return $info;
}
但是,它似乎总是返回最后一项,在这种情况下是hello2:
echo getData("data/test/hello/hello2", "data/test");
给我;
hello2
我做错了什么?
【问题讨论】:
-
您只想要“你好”部分吗?如果没有换行符,你为什么要在换行符上爆炸
$data? -
是的。之后就什么都没有了。
-
您每次通过循环设置
$info。循环完成后,它将包含上次设置时的分配。 -
人们在不需要时使用正则表达式,在需要时忽略。基本上,
data/test/(\w+)是您正在寻找的模式:gskinner.com/RegExr