PHPの「preg_match_all」に関する質問です。あるテキストから「●●●1234567,名前様●」という部分を抜き出したいので以下のように記述しましたが、条件に合致する一番最後の「●●●1234567,名前様●」しか

画面上に表示されません。

どのように書きかえればよいですか?


<?php

mb_internal_encoding('UTF-8');
mb_regex_encoding('UTF-8');


$fp = fopen('test.txt', "r");
while( ! feof($fp) ) {
$buffer = fgets( $fp, 4096 );

}
fclose ($fp);


preg_match_all('/●●●(.*?)様●/s',$buffer,$array) ;


$a=0;
while ($a <= 10) {
echo $array[1][$a] . "<br>";
$a++;
}

?>

回答の条件
  • 1人2回まで
  • 登録:2009/07/29 17:35:22
  • 終了:2009/07/29 19:31:44

回答(1件)

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332009/07/29 18:11:36

ポイント60pt

$buffer = fgets( $fp, 4096 );

ここが間違っています。これでは最後の1行しか読み込みません。


また、念のため、preg_match_all を UTF-8 対応にするため、u オプションを付けておくといいでしょう。

というわけで、改善したソースを下記に示します。


<?php
mb_internal_encoding('UTF-8');
mb_regex_encoding('UTF-8');

$fp = fopen('test.txt', "r");
$buffer = '';
while( ! feof($fp) ) {
    $buffer .= fgets( $fp, 4096 );
}
fclose ($fp);

preg_match_all('/●●●(.*?)様●/us',$buffer,$array) ;

$a=0;
while ($a <= 10) {
    echo $array[1][$a] . "<br>";
    $a++;
}
?>
id:hayazashisenmon

あーなるほど。データの読み込みで「.」で足しこんでなかったからうわがかれて、最後の行だけ残ったわけですね。

助かりました。テスト環境でも上手く行ったので、これでクローズとします。

2009/07/29 19:31:27

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません