2

我目前正在尝试使用 php 脚本从 .txt 文件中拖出一些信息。我一直在阅读有关正则表达式的信息,并认为这将是理想的。为了让您了解 .txt 文件中文本的格式,如下所示:

Data Rate: 20 Hz

Digital I/O Channels: 
CH1_IN,0,CH2_OUT,1,CH3_IN,0,CH4_OUT,1,CH5_IN,0,CH6_IN,0,CH7_IN,0,CH8_OUT,0,CH9_IN,0,
CH10_IN,0,CH11_OUT,1,CH12_IN,0,CH13_IN,0,CH14_IN,0,CH15_IN,0,CH16_IN,0,

QEA: Enabled

我正在尝试为每个频道提取以下详细信息:

CH(number)_(IN or OUT),(integer)

如各种帖子和一些教程中所述,我尝试使用 preg_split 但无法让它按我想要的方式工作。我的理解是,如下所示的东西应该可以工作,尽管我可能没有正确使用它:

$log_file_data = file_get_contents('Log.txt');
$channel_detail = preg_split("/CH[0-9]{2}_[A-Z],[0-1]{1}/",$log_file_data);

我的意图是,这会将文本很好地拆分为前面所述的部分,但正如预期的那样,它几乎会喷出完整的文本文件。我使用的是正确的方法还是不适合我想要实现的目标?

任何指导将不胜感激。

4

2 回答 2

2

preg_split您实际上不需要,但preg_match_all使用改进的正则表达式:

$line = <<< EOF
CH1_IN,0,CH2_OUT,1,CH3_IN,0,CH4_OUT,1,CH5_IN,0,CH6_IN,0,CH7_IN,0,CH8_OUT,0,CH9_IN,0,
CH10_IN,0,CH11_OUT,1,CH12_IN,0,CH13_IN,0,CH14_IN,0,CH15_IN,0,CH16_IN,0,
EOF;

if (preg_match_all('/CH([0-9]+)_(IN|OUT),([01])/', $line, $arr))
   print_r($arr);

您的频道#、IN/OUT 和下一个号码在#1、#2 和#3 组中可用

于 2013-11-10T16:27:08.070 回答
0

你真的根本不需要正则表达式。在 ',' 上展开将产生一个数组,该数组是所有奇数索引的通道名称,并且每个偶数将包含一个属于最后一个索引的整数。

干杯

于 2013-11-10T16:30:10.453 回答