2011-03-29 7 views
0

親愛なるすべて、 を使用してファイルから特定の文字列を取りますか?私は以下のコードを使用しますが、私には適切な出力が与えられません。私が好きtxtファイルを持っているPHP

$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--

は、配列に2名を取るために私を助けて、誰彼らのあらゆる種類の心のですか? advance.riad

答えて

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'

これは、正しい形式でないものを自動的に無視するということです。

次のファイルでは、asdは無視されます。

--start-- 
    jeff 
--end-- 
asd 
--start-- 
    sophya 
--end-- 
+0

おかげさまで私が探している解決策です。 Jacobに感謝します。 – riad

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); 
+0

+1する前に、これはactualy速く2つの答えが怒鳴るよりも、それはないですasumes ? –

+0

また、最初の空白要素を配列から削除する必要があります。そしてそれはよく形成された入力に依存します。 – Jacob

+0

@Jacob:ありがとう。 – Gaurav

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

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

これはオールウェイズ--start--後に新しい行を持っていると--end--

関連する問題