我对正则表达式感到有些困惑,我正试图从PHP的命令行程序中获得百分比进度。问题的组合。
我使用exec
从命令行运行脚本exec('python scriptos.py', $returnData, $returnCode);
然后我想循环遍历returnData(正在改变现场) - 所以我不确定如何解析响应?我打算通过$ returnData来找到这个......
[download] 1.0% of 218.08M at 431.42k/s ETA 08:32
然后我真的很难找出正则表达式来获得这个百分比。我的理论是寻找数字和结束百分比。
所以,双向问题
任何帮助都会有所帮助!
答案 0 :(得分:3)
您通常可以使用popen
来读取命令的连续输出:
$p = popen("sh -c 'while true ; do echo 99% ; sleep 0.5; done'", "r");
while (!feof($p)) {
$line = fgets($p);
}
要获得百分比,您只需要一个简单的正则表达式:
preg_match('#([\d.]+)%#', $line, $match);
$percent = $match[1];
答案 1 :(得分:3)
从输出行this正则表达式
中提取进度(\d+(\.\d+)?(?=%))
并阅读输出使用popen()
:
$handle = popen("yourCommand", "r");
while (!feof($handle)) {
$data = fgets($handle);
$matches = array();
preg_match('/(?<percent>\d+(\.\d+)?(?=%))/', $data, $matches);
echo $matches["percent"];
}
答案 2 :(得分:0)
<?php
preg_match('#([0-9\.]+)%#', '[download] 1.0% of 218.08M at 431.42k/s ETA 08:32', $matches);
echo $matches[0]; # 1.0%
?>
同时检查一下......
<?php
$string = '[download] 1.0% of 218.08M at 431.42k/s ETA 08:32';
$data = explode(' ', $string);
list( , $percentage, , $size, , $speed, , $eta) = $data;
echo $percentage, $size, $speed, $eta;
?>
答案 3 :(得分:0)
$str = "[download] 99.55% adasdasd";
preg_match("/[0-9]{1,2}\.[0-9]{1,2}%/is", $str, $m);
print $m[0];