PHP中的这个正则表达式是否真的有效?

Abs*_*Abs 1 php regex

我希望正则表达专家可以告诉我为什么会出错:

这个正则表达式:

$pattern = '/(?<percent>[0-9]{1,3}\.[0-9]{1,2})% of (?<filesize>.+) at/';
Run Code Online (Sandbox Code Playgroud)

应该匹配这种字符串:

[download] 87.1% of 4.40M at 107.90k/s ETA 00:05 
[download] 89.0% of 4.40M at 107.88k/s ETA 00:04 
[download] 91.4% of 4.40M at 106.09k/s ETA 00:03 
[download] 92.9% of 4.40M at 105.55k/s ETA 00:03
Run Code Online (Sandbox Code Playgroud)

正确?是否有任何可能出现错误的正则表达式无法与上述输入相匹配?完全用法:

while(!feof($handle))
{
    $progress = fread($handle, 8192);
    $pattern = '/(?<percent>[0-9]{1,3}\.[0-9]{1,2})% of (?<filesize>.+) at/';
    if(preg_match_all($pattern, $progress, $matches)){
    //matched
    }
}
Run Code Online (Sandbox Code Playgroud)

fread正在读取多少正在影响正则表达式才能正常工作?

我真的需要确认,因为我试图找出它为什么不在新服务器上工作.此问题与"服务器许可证中的更改"脚本无法正常工作相关.这可能是由于PHP.ini有所不同吗?

谢谢大家

更新2

我已经制作了一个测试脚本来测试正则表达式,但即使它本身也不起作用?

<?php 

error_reporting(E_ALL);

echo 'Start';

$progress = "[download]75.1% of 4.40M at 115.10k/s ETA 00:09 [download] 77.2% of 4.40M at 112.36k/s ETA 00:09 [download] 78.6% of 4.40M at 111.41k/s ETA 00:08 [download] 80.3% of 4.40M at 110.80k/s ETA 00:07 [download] 82.3% of 4.40M at 110.30k/s ETA 00:07 [download] 84.3% of 4.40M at 108.33k/s ETA 00:06 [download] 85.7% of 4.40M at 107.62k/s ETA 00:05 [download] 87.5% of 4.40M at 107.21k/s ETA 00:05 [download] 89.5% of 4.40M at 105.10k/s ETA 00:04 [download] 90.7% of 4.40M at 106.45k/s ETA 00:03 [download] 93.2% of 4.40M at 104.92k/s ETA 00:02 [download] 94.8% of 4.40M at 104.40k/s ETA 00:02 [download] 96.5% of 4.40M at 102.47k/s ETA 00:01 [download] 97.7% of 4.40M at 103.48k/s ETA 00:01 [download] 100.0% of 4.40M at 103.15k/s ETA 00:00 [download] 100.0% of 4.40M at 103.16k/s ETA 00:00
";

$pattern = '/(?<percent>\d{1,3}\.\d{1,2})%\s+of\s+(?<filesize>[\d.]+[kBM]) at/';

if(preg_match_all($pattern, $progress, $matches)){
    echo 'match';
}

echo '<br>Done<br>';    

?>
Run Code Online (Sandbox Code Playgroud)

jer*_*oen 5

我对命名捕获并不熟悉,但我认为在PHP中它应该是:

$pattern = '/(?P<percent>[0-9]{1,3}\.[0-9]{1,2})% of (?P<filesize>.+) at/';
Run Code Online (Sandbox Code Playgroud)

注意问号后面的P.

资源: