我正在使用php获取一个shell输出,列出了所有meetme
个频道。我只想从下往上抓取Conf Num
0001
。在下面的示例中,我想分配变量:$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”;它。
非常感谢我能得到的任何帮助。
答案 0 :(得分:1)
您可以使用exec而不是shell_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;
}
}
修改强>
<?php
$output = array();
exec("asterisk -rx 'meetme list'", $output);
$lines = sizeof($output);
for ($i = $lines -1; $i >=0 ; $i--) {
if (preg_match('/^(\d+)\s+0001\s/', $output[$i], $matches)) { //Check line contains 0001
$firstNumber = $matches[1];
echo $firstNumber;
break;
}
}
答案 1 :(得分:1)
好的,假设Linux,你可以在shell中完成这个:
grep -v 'Total number of MeetMe isers'
grep -v 'Conf Num'
Conf Num
: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 :)
或使用preg_match_all()
:
$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];
}
回应评论:
您应该研究\d
和+
的正则表达式语法和含义。 \d+
将与0
,01
或00000000000000000000000000000000
匹配:)。