【发布时间】:2014-06-15 21:12:44
【问题描述】:
我有一个文件,其中包含几种颜色作为十六进制(即#000 或#ffffff),我试图用@varN 替换它们中的每一个,其中 N 是一个随着每次替换完成而递增的数字。我相信我的代码可以做到这一点,但$count 在放置后总是返回 196,即使我将限制设置为 1,所以计数永远不会超过 1。这会导致无限循环。为什么限制不起作用以及我可以做些什么来获得所需的输出?
$list = file($filepath.$file, FILE_USE_INCLUDE_PATH);
$pattern = "/#((([a-f]|[A-F]|[0-9]){6})|(([a-f]|[A-F]|[0-9]){3}))/";
$replaceVar = "@var";
$replaceNum = 0;
$count = 1;
while($count != 0){ //never ends
$replacement = $replaceVar.$replaceNum;
$output = preg_replace($pattern,$replacement,$list,1,$count);
$replaceNum++;
echo $replaceNum." ".$count."\n"; //returns $replaceNum and 196
}
file_put_contents($filepath.'/new'.$file,$output,FILE_USE_INCLUDE_PATH);
示例输入文件:
#000000 #111111 #123456 #abcdef #123 #abc
示例输出文件:
@var1 @var2 @var3 @var4 @var5 @var6
【问题讨论】:
-
file将所有内容放到一个数组中,你最好使用file_get_contents,这里你的$count不会减少所以有一个无限循环是正常的,$count是什么? -
file_get_contents给了我一个字符串,这意味着我必须知道如何将字符串转换回一个文件,所有换行符都在正确的位置。我了解$count是对我的$list进行替换的次数。对于$limit = 1,$count永远不应超过 1。
标签: php preg-replace limits