我目前正在尝试使用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);
我的意图是,这会将文本很好地分成如前所述的部分,但正如预期的那样,它几乎喷出完整的文本文件。我使用的是正确的方法还是不适合我想要实现的目标?
任何指导都将不胜感激。
答案 0 :(得分: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);
您的频道#,输入/输出和下一个号码在组#1,#2和#3
中可用答案 1 :(得分:0)
你根本不需要正则表达式。爆炸','将产生一个数组,它是所有奇数索引的通道名称,每个偶数将包含一个属于最后一个索引的整数。
干杯