4

重複の可能性:
PHP の数字に基づいて文字列配列を分割していますか?

すべてが 1 つの大きなテキスト チャンクに含まれる一連のデータがあります。次のようになります。

01/02 10:45:01 テスト データ 01/03 11:52:09 テスト データ 01/04 18:63:05 テスト データ 01/04 21:12:09 テスト データ 01/04 13:10:07 テスト データ01/05 07:08:09 テスト データ 01/05 10:07:08 テスト データ 01/05 08:00:09 テスト データ 01/06 11:01:09 テスト データ

私は単純にこれを読みやすくしようとしています (たとえば、以下を参照)。ただし、各行でわずかに似ているのは、開始が 00/00 パターンに従うことだけです。

01/02 10:45:01 test data 
01/03 11:52:09 test data 
01/04 18:63:05 test data 
01/04 21:12:09 test data 
01/04 13:10:07 test data 
01/05 07:08:09 test data 
01/05 10:07:08 test data 
01/05 08:00:09 test data 
01/06 11:01:09 test data 

それを正規表現パターンに一致させることで、それを分割するところまで来ました。

$split = preg_split("/\d+\\/\d+ /", $contents, -1, PREG_SPLIT_NO_EMPTY);

そして、これは出力します。

Array ( [0] => 
        [1] => 10:45:01 test data 
        [2] => 11:52:09 test data 
        [3] => 18:63:05 test data 
        [4] => 18:63:05 test data 
        ...and so on

しかし、ご覧のとおり、問題は preg_split が区切り記号を保持していないことです。preg_split を次のように変更してみました。

$split = preg_split("/\d+\\/\d+ /", $contents, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE

ただし、これは上記と同じものを返しますが、行頭に 00/00 はありません。

私は何か間違ったことをしましたか、それともこれを達成するためのより良い方法ですか?

4

2 に答える 2

4

先読みアサーションpreg_split()を使用して、数字-スラッシュ-数字が後に続く文字列内の任意のポイントで分割するように指示できます。

$result = preg_split('#(?=\d+/\d+)#', $contents, -1, PREG_SPLIT_NO_EMPTY);

フラグが使用されるのPREG_SPLIT_NO_EMPTYは、文字列の最初が 3 桁のポイントでもあり、ここで空の分割が発生するためです。文字列の最初で分割しないように正規表現を変更することもできますが、フラグは非常に明確ですが、一目で理解するのが少し難しくなります。

于 2013-01-02T12:01:42.403 に答える
2

PHP:

<?php

$text = '01/02 10:45:01 test data 01/03 11:52:09 test data 01/04 18:63:05 test data 01/04 21:12:09 test data 01/04 13:10:07 test data 01/05 07:08:09 test data 01/05 10:07:08 test data 01/05 08:00:09 test data 01/06 11:01:09 test data';

$text = preg_replace('/(\d{2})\/(\d{2})(.*)/U', PHP_EOL . "$0", $text);

echo $text;

出力:

01/02 10:45:01 test data 
01/03 11:52:09 test data 
01/04 18:63:05 test data 
01/04 21:12:09 test data 
01/04 13:10:07 test data 
01/05 07:08:09 test data 
01/05 10:07:08 test data 
01/05 08:00:09 test data 
01/06 11:01:09 test data

デモ

于 2013-01-02T12:00:35.383 に答える