我有一个包含数百行数据的文本文件 - 每行都用换行符分隔。
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将不胜感激。
答案 0 :(得分:0)
我选择使用preg_match_all
,因为它会在$line
内捕获超过一次的模式。其次,我将正则表达式修改为以下
preg_match_all('/\[([^\]]+)\]/', $line, $matches);
[^\]]+
所说的内容与至少一个不是]
的字符匹配。如果您还想捕捉空出现,即可将修饰符+
更改为*
。 []
。