php从输出中剥离特定结果

php从输出中剥离特定结果,php,preg-replace,shell-exec,Php,Preg Replace,Shell Exec,我正在使用php获取一个shell输出,它为我列出了所有meetme频道。我只想从下至上抓取具有0001的confnum。在下面的示例中,我想分配变量:$confnum=“32” 以下是我目前的代码: $output = shell_exec("asterisk -rx 'meetme list'"); echo $output; 请帮助我获取$output的结果 下面是执行meet.php文件时得到的结果 [root@C1033-TF agi-bin]# php meet.php Conf

我正在使用php获取一个shell输出,它为我列出了所有
meetme
频道。我只想从下至上抓取具有
0001
confnum
。在下面的示例中,我想分配变量:
$confnum=“32”

以下是我目前的代码:

$output = shell_exec("asterisk -rx 'meetme list'");

echo $output;
请帮助我获取$output的结果

下面是执行meet.php文件时得到的结果

[root@C1033-TF agi-bin]# php meet.php
Conf Num       Parties        Marked     Activity  Creation  Locked
67             0001       N/A        00:00:16  Dynamic   No    
28             0001       N/A        00:00:19  Dynamic   No    
65             0001       N/A        00:01:14  Dynamic   No    
42             0001       N/A        00:01:18  Dynamic   No    
32             0001       N/A        00:04:18  Dynamic   No    
* Total number of MeetMe users: 5
请记住,有时Conf Num中会有不止0001个参与方。在上面的示例中,我只想抓住这一行:

32             0001       N/A        00:04:18  Dynamic   No
这是具有0001的最后一行,因此分配$confnum=“32”;去吧


非常感谢在这方面我能得到的任何帮助。

您可以使用exec而不是shell\u exec并遍历输出行:

<?php
$output = array();
exec("asterisk -rx 'meetme list'", $output);

foreach ($output as $line) {
   if (preg_match('/^32\s/', $line)) { //Check line starts with 32
      echo $line;
   }
}

好的,假设是Linux,您完全可以在shell中执行此操作:

  • 筛选最后一行:
    grep-v“会议服务器总数”
  • 筛选第一行:
    grep-v'confnum'
  • 并且只打印一个
    confnum
    awk'BEGIN{result=”“;}{if($2==“0001”){result=$1;}}}END{print result;}'
因此,整个代码:

$output = shell_exec("asterisk -rx 'meetme list' | grep -v 'Total number of MeetMe isers' | grep -v 'Conf Num' | awk 'BEGIN{ result=\"\"; } {if( \$2 == \"0001\"){result=$1;}} END {print result;}'");
// $output should contain your data :)
或使用:

针对评论:


您应该学习正则表达式语法和and的含义<代码>\d+
将匹配
0
01
00000000000000000000000000
:)。

但有时它不是32。。。我只想要最后一行conf numb,它有0001个itI,我尝试了这个,并得到了这个错误:PHP警告:shell_exec()只需要1个参数,2在第3行sorry的/var/lib/asterisk/agi bin/meet2.PHP中给出,我的意思是exec而不是shell_exec。我已经准备好编辑答案了我怎么能只抓住第一组数字而不是整行?你是说32?我修改了脚本,你应该在$firstNumber变量中得到它。我刚刚尝试了第一个shell方法,我发现了这个错误:PHP解析错误:语法错误,第3行的/var/lib/asterisk/agi bin/meet.PHP中出现意外的T_LNUMBER你的第二个建议很好,但它给出了整行代码,我只想要Conf Num数字……而且Conf数字并不总是两位数,它可以是3-4位数well@thevoipman我修复了字符串中未转义的
。您应该自己执行此操作,而不仅仅是“给我kodes”并粘贴它。对于第二部分…尝试使用
打印($matches)
print\r($match)
在循环中。同样,请使用大脑,不要只是复制代码。我正在尽力调试,但是,我得到的结果是空的
$output = shell_exec("asterisk -rx 'meetme list' | grep -v 'Total number of MeetMe isers' | grep -v 'Conf Num' | awk 'BEGIN{ result=\"\"; } {if( \$2 == \"0001\"){result=$1;}} END {print result;}'");
// $output should contain your data :)
$output = shell_exec("asterisk -rx 'meetme list'");
$matches = array();
$result = null;
preg_match_all('~^\s*(\\d+)\\s+0001~', $output, $matches, PREG_SET_ORDER);
foreach( $matches as $match ){
  $result = $match[1];
}