PHP preg_replace填充数字



我想在html中找到最新的视频,但这个html排序不好。

https://jsfiddle.net/8zk6j7dv/

<html><head><title>111.111.111.111 - /video8/</title></head><body><H1>111.111.111.111 - /video8/</H1><hr>
[到家长目录]

5/14/2020 11:26 AM 635 2020y-5m-14d-11h-20m-44s.mp4 5/14/2020 12:02 30333149下午 2020年-5分钟-14天-11小时-57米-38秒.mp4 2020年5月14日 下午12:21 32048599 2020年-5米-14天-12小时-16米-7秒.mp4 2020年5月14日 下午12:31 31973846 2020年-5米-14天-12小时-26米-6秒.mp4 2020年5月14日 下午12:41 33358304 2020年-5米-14天-12小时-36米-6秒.mp4 2020年5月14日 下午12:51 29515351 2020年-5米-14天-12小时-46米-6秒.mp4





2020/5/14 下午1:01 34340983 2020年-5米-14天-12小时-56米-6秒.mp4
2020/5/14 下午12:11 31259022 2020年-5米-14天-12小时-6分钟-6秒.mp4
2020/5/14 1:21 PM 36133243 2020y-5m-14d-13h-16m-9s.mp4 2020/5/14 1:31 PM 38054158 2020y-5m-14d-13h-26m-6s.mp4 2020/5/14 1:36 PM 0 2020y-5m-14d-13h-36m-6s.mp4_audio 2020/5/14 1:38 PM 19232355 2020Y-5M-14D-13H-36M-6S.mp4_视频 2020/5/14 1:46 PM 36643767 2020Y-5M-14D-13H-41M-6S.mp4




2020/5/14 下午 1:56 36170676 2020y-5m-14d-13h-51m-7s.mp4

文件名不会将 5m 填充到 05m,所以我无法比较时间。我需要先格式化它们。

$arr = ["2020y-1m-1d-0h-0m-0s",
"2020y-5m-20d-12h-10m-6s",
"2020y-5m-24d-12h-0m-6s",
"2020y-12m-31d-23h-50m-56s"
];

foreach ($arr as $key=>$value) {
$tt = preg_replace('/-(?<![0-9])(d)(?![0-9])w/', 'str_pad($1, 2, "0", STR_PAD_LEFT)', $value);
//$tt = preg_replace('/-(?<![0-9])(d)(?![0-9])w/', '0$1', $value);
echo $tt; 
echo "nr";
}

输出应为

2020y-01m-01d-00h-00m-00s
2020y-05m-20d-12h-10m-06s
2020y-05m-24d-12h-00m-06s
2020y-12m-31d-23h-50m-56s

如何修复preg_replace?

https://regex101.com/r/HywlVw/1/

如果您确实想为此使用正则表达式而不是strptimestrftime,您可以使用以下内容:

(?<=-)(d)(?=[msdh])

https://regex101.com/r/kzhXF2/1

不需要任何捕获组。

查找:~-K(?=d[dhms])~替换:0

这意味着寻找一个连字符,然后忘记你找到了它(K(,然后向前看一个紧跟dhms的数字。 然后,您只需将该零宽度位置替换为零即可。

preg_replace('~-K(?=d[dhms])~', '0', $arr);

最新更新