Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正则表达式php和文本文件_Php_Regex_Text Files - Fatal编程技术网

正则表达式php和文本文件

正则表达式php和文本文件,php,regex,text-files,Php,Regex,Text Files,我目前正试图使用php脚本从.txt文件中拖出一些信息。我一直在读关于regex的书,我认为这会很理想。为了让您了解一些情况,.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

我目前正试图使用php脚本从.txt文件中拖出一些信息。我一直在读关于regex的书,我认为这会很理想。为了让您了解一些情况,.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);
我的意图是,这将很好地将文本分割成前面描述的部分,但正如预期的那样,它几乎只会输出完整的文本文件。我使用的是正确的方法还是不适合我想要达到的目标


任何指导都将不胜感激。

您实际上不需要
preg\u split
而是
preg\u match\u 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);

$line=您根本不需要正则表达式。在“,”上分解将产生一个数组,该数组是所有奇数索引的通道名称,每个偶数将包含一个属于最后一个索引的整数


干杯

嘿,阿努巴瓦,比我试图做的要整洁得多,而且似乎几乎奏效了。我不确定我是否可以使用$line=2[2]=>3[3]=>4[4]=>5[5]等等。。。。你认为我做错了什么?
$line=Ahh,我想我明白了,我读了一些preg_match_all的资料,据我所知,可以创建多个数组来生成“匹配模式”的所有匹配。因此,当我只打印$arr[0]时,我得到了我所需要的东西。谢谢