使用php从文件中获取特定字符串

时间:2011-03-29 09:11:57

标签: php

亲爱的, 我有一个像txt文件:

--start--
  jeff
--end--
--start--
  sophya
--end--

现在我需要将像jeff和sophya这样的名字收集到一个数组中。我怎么做?我使用下面的代码,但它没有给我正确的输出。

$data = file_get_contents('http://localhost/sample.txt');
$start_position = strstr($data,'--start--');
$end_position    = strpos($data,'--end--') ;
$value=substr($start_position,$end_position);
print_r($value);
exit();

我的出局是:--end-- --start-- sophya --end--

他们是谁帮助我将两个名字放入阵列? 谢谢in advance.riad

3 个答案:

答案 0 :(得分:3)

您可以在这里使用一些方法......我个人会使用正则表达式来匹配您需要的内容。 preg_match_all()

$contents = file_get_contents('http://localhost/sample.txt');

preg_match_all('/--start--(.*?)--end--/ms', $contents, $matches);

foreach($matches[1] as $name) {
    var_dump($name);
}

注意:这包括每一行的行尾字符。要从名称和空格中排除它们,请使用模式'/--start--\n\s*(.*?)\s*\n--end--/ms'

我应该提一下,这样做的好处是它会自动忽略那些格式不正确的东西。

e.g。在以下文件中,asd将被忽略。

--start--
  jeff
--end--
asd
--start--
  sophya
--end--

答案 1 :(得分:1)

$data = file_get_contents('http://localhost/sample.txt');
$data = str_replace('--end--', ' ', $data);  // remove existence of --end--
$data = explode('--start--', $data);  // resulted array
unset($data[0]);
echo implode(' ', $data);

答案 2 :(得分:0)

$data = '--start--
  jeff
--end--
--start--
  sophya
--end--';

preg_match_all('/--start--\n(.*)\n--end--/iu', $data, $matches);
var_dump($matches);

这假设你在--start--之后和--end -

之后总是有一个新行