如何使用方括号中指定的FROM和TO数字用PHP扩展字符串?
假设我有字符串http://www.example.com/images/[1-12].jpg.我想将其扩展为:
这是我的代码: $str = "http://www.example.com/images/[1-12].jpg"; while(preg_match_all("/^([^[]]*)[(d+)-(d+)](.*)$/m",$str,$mat)){ $arr = array(); $num = sizeof($mat[0]); for($i = 0; $i < $num; $i++){ for($j = $mat[2][$i]; $j <= $mat[3][$i]; $j++){ $arr[] = rtrim($mat[1][$i].$j.$mat[4][$i]); } } $str = implode(PHP_EOL,$arr); } 即使我将$str更改为更复杂的表达式,它仍然可以正常工作,如下所示: $str = "http://www.example.com/images/[1-4]/[5-8]/[9-14].jpg"; 但遗憾的是,不支持零填充整数.所以,如果我开始: $str = "http://www.example.com/images/[001-004].jpg"; 预期结果:
而实际结果如下:
如何更改此行为,以便我的代码产生预期的结果?另外,我的代码的其他缺点是什么?我应该真的使用while循环和preg_match_all,还是有更快的替代品? 更新:将我的代码的第七行更改为 $arr[] = rtrim($mat[1][$i].str_pad($j,strlen($mat[2][$i]),STR_PAD_LEFT).$mat[4][$i]); 似乎可以做到这一点.非常感谢sjagr提出这个建议.我的问题仍然存在,因为我想知道我的代码和更快的替代品(如果有的话)的缺点. 解决方法
根据@ SoumalyoBardhan的要求,我的建议/答案:
如果使用 $arr[] = rtrim($mat[1][$i].str_pad($j,STR_PAD_LEFT).$mat[4][$i]); 我真的看不出还有什么可以用你的代码改进,虽然我不完全理解如何在while语句中使用preg_match_all. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |