【问题标题】:Grab certain strings from text file and put into csv从文本文件中获取某些字符串并放入 csv
【发布时间】:2011-12-14 06:23:13
【问题描述】:

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

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 的帮助将不胜感激。

【问题讨论】:

    标签: php preg-match


    【解决方案1】:

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

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

    [^\]]+ 所说的是匹配至少一个不是] 的字符。如果您还想捕获空事件,可以将修饰符 + 更改为 *,即。 [].

    【讨论】:

      猜你喜欢
      • 2022-07-06
      • 1970-01-01
      • 1970-01-01
      • 2020-08-19
      • 1970-01-01
      • 1970-01-01
      • 2014-01-16
      • 2012-01-11
      相关资源
      最近更新 更多