2011-12-13 7 views
0

私は、何百行ものデータ行を含むテキストファイルを持っています - それぞれは改行で区切られています。テキストファイルから特定の文字列を取得してcsvに入れます

data.txtを:

......Tue Dec 13 [alphanumeric1.alphanumeric1] : blah [alphanumeric1] ? blahblah [alphanumeric1] : blah 
..Tue Dec 13 [alphanumeric2.alphanumeric2] : blah [alphanumeric2] ? blahblah [alphanumeric2] : blah 
..................Tue Dec 13 [alphanumeric3.alphanumeric3] : blah [alphanumeric3] ? blahblah [alphanumeric3] : blah 

各行は、長さが変化すると一意であるが、それぞれが[]さんの三組を持っており、内部のデータは、私が欲しいものです。

目的は、data.txtを1行ずつ読み込み、[]内のデータをcsvの独自の列に入れることです。

result.csv:

col1       col2   col3 

    alphanumeric1.alphanumeric1 alphanumeric1 alphanumeric1 
    alphanumeric1.alphanumeric2 alphanumeric2 alphanumeric2 
    alphanumeric1.alphanumeric3 alphanumeric3 alphanumeric3 

So thats: 
alphanumeric1.alphanumeric1,alphanumeric1,alphanumeric1 
alphanumeric1.alphanumeric2,alphanumeric2,alphanumeric2 
alphanumeric1.alphanumeric3,alphanumeric3,alphanumeric3 

私は細かい開くテキストファイル持っている:

$fh = fopen('data.txt','r'); 
while ($line = fgets($fh)) { 
    echo $line; 
} 

をしかし、私はするpreg_matchに問題があり、に[]のデータを取得していますcsv。

preg_match('/\[(.+)\]/', $line, $matches); 

preg_matchを使用して、そのデータを.csvにプッシュすると役立ちます。

答えて

0

preg_match_allで作業することを選択します。これは、パターンの出現回数が$lineよりも多く発生するためです。第二に、私は]ない試合、少なくとも1つの文字であると言い何[^\]]+

preg_match_all('/\[([^\]]+)\]/', $line, $matches); 

に正規表現を変更しました。空の発生を捕らえたい場合は、修飾子+*に変更することができます。 []

関連する問題