从文本文件中获取某些字符串并放入csv

时间:2011-12-13 20:51:48

标签: php preg-match

我有一个包含数百行数据的文本文件 - 每行都用换行符分隔。

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,将[]中的数据放入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将不胜感激。

1 个答案:

答案 0 :(得分:0)

我选择使用preg_match_all,因为它会在$line内捕获超过一次的模式。其次,我将正则表达式修改为以下

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

[^\]]+所说的内容与至少一个不是]的字符匹配。如果您还想捕捉空出现,即可将修饰符+更改为*[]