PHPでフォーマットしようとしているプレーンテキストのジャーナルがあります。各エントリを日付とテキストを含む配列に分割したいと思います。
preg_split を使用してこれを行うことができますが、日付が完全に削除されます!
txt ファイルは次のようになります。
2012-01-28
text text text
2012-01-14
some other text
2011-12-07
a previous entry
等
PHPでフォーマットしようとしているプレーンテキストのジャーナルがあります。各エントリを日付とテキストを含む配列に分割したいと思います。
preg_split を使用してこれを行うことができますが、日付が完全に削除されます!
txt ファイルは次のようになります。
2012-01-28
text text text
2012-01-14
some other text
2011-12-07
a previous entry
等
フラグは、PREG_SPLIT_DELIM_CAPTURE
パターン文字列で日付が括弧で囲まれている限り、分割時に日付が削除されないようにします。例えば:
$array = preg_split('/(\d{4}-\d{2}-\d{2})/', $text, null, PREG_SPLIT_DELIM_CAPTURE);
これで、日付は配列の奇数インデックスになり、コンテンツは偶数インデックスになります。
ぜひ、次のことができますpreg_match_all
。
$matches = array();
preg_match_all('~(?P<date>\d{4}-\d{2}-\d{2})\s*(?P<text>.*)~ms', $subject, $matches);
コンテンツに合わせて少し調整する必要があるかもしれません。
のような構造になります
matches => {
date(3) => {"2012-01-28", ... }
...
text(3) => {"text text text", ...}
これは簡単に利用したり、カスタム構造に変換したりできます。