我正在尝试从以下字符串中获取下载的百分比值。
[download] Destination: Kool - Get Noticed - Apurbo-7CggL03TTl4.mp4
[download] 100% of 1.60MiB in 00:21
[download] Destination: Kool - Get Noticed - Apurbo-7CggL03TTl4.m4a
[download] 100% of 164.86KiB in 00:01
对于前。只有值'100' between '[download]' and '% of'
。
这是我迄今为止尝试过的代码
$file = file_get_contents("t.txt");
if (preg_match_all("/(?<=\[download\])(.*?)(?=\% of)/s", $file, $result))
for ($i = 1; count($result) > $i; $i++) {
print_r($result[$i]);
}
但问题是它从第一行获得并输出如
Array ( [0] => Destination: Kool - Get Noticed - Apurbo-7CggL03TTl4.mp4 [download] 100 [1] => Destination: Kool - Get Noticed - Apurbo-7CggL03TTl4.m4a [download] 100 )
如果我能在'% of'
之前抓住,我认为这是可以的。我是否应该坚持使用此代码来修改或更改整个模式?
答案 0 :(得分:2)
这应该适合你:
这里我首先将您的文件放入一个file()
的数组中,其中每一行都是一个数组元素。在那里,我忽略了新的行字符和空行。
在此之后,我会使用array_map()
检查每一行,如果有这样的模式,preg_match_all()
我会检查[download] (\d+)% of
。<?php
$lines = file("t.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$numbers = array_filter(array_map(function($v){
if(preg_match_all("/\[download\] (\d+)% of/", $v, $m))
return $m[1][0];
else
return false;
}, $lines));
print_r($numbers);
?>
。如果它找到了我返回的数字,否则我返回false,最后我用array_filter()
out过滤了带有false的元素。
Array ( [1] => 100 [3] => 100 )
输出:
.pricetag:before{
position:absolute;
content:"\25CF";
color:white;
text-shadow: 0 0 1px #333;
font-size:11px;
line-height:0px;
text-indent:12px;
left:-42px; // <-- increase this
top: 0; // <-- add this
width: 1px;
height:0px;
border-right:41px solid #E8EDF0;
border-top: 43px solid transparent;
border-bottom: 43px solid transparent;
}