大家好,我在使用preg_replace方法替换字符串时,出现了一些问题,代码如下:
        ... ...
                $strContent = "content_xNum" for( $iter=0;$iter<$num;$iter++ ) {
$pattern = '/xNum/';

$strIter = $iter;

if( $iter<10 && $num>10 ){
$strIter = "0".$iter;
}

$strContent = preg_replace($pattern, $strIter, $strContent);
writeUTF8($strContent,$fileName); }但经过替换的$strContent结果总是'content_0',而不是预期的值,这是怎么回事呀?请大家帮我看一下:) 

解决方案 »

  1.   

    你预期的值是什么   $num的值又是多少?
      

  2.   

    你的预期值是什么?
    你的$num值是否大于10?
      

  3.   

    NUM的值我传给过两个,一个是10,另一个是100
      

  4.   

    10 就是 content_0
    100 就是 content_00  就你给出的代码
      

  5.   

    是的,但我希望得到的结果是:10的时候 content_0、content_1、content_2...content_9100的时候 content_00、content_01...content_99
      

  6.   

    $strContent = "content_xNum"        for( $iter=0;$iter<$num;$iter++ ) {
                $pattern = '/xNum/';
                
                $strIter = $iter;
                
                if( $iter<10 && $num>10 ){
                    $strIter = "0".$iter;
                }
                
                $str = preg_replace($pattern, $strIter, $strContent);        
                            writeUTF8($str,$fileName);        }你第一次已经把 $strContent改变,第二次无法匹配就原样返回了
      

  7.   

    $strContent = "content_xNum";
    $num        = 100;
    $pattern = '/xNum/';
    for( $iter=0;$iter<$num;$iter++ ) {
        $t = preg_replace($pattern, sprintf("%0".(strlen($num)-1)."d",$iter), $strContent);        
    echo $t."<br/>";
    }
      

  8.   

    <?php
    $strContent = "content_xNum";
    $num = 11;
    for($iter = 0; $iter < $num; $iter++ ) {
    $pattern = '/xNum/';

    $strIter = $iter;

    if( $iter<10 && $num>10 ){
    $strIter = "0".$iter;
    }
    echo $strIter."\r\n";
    $str1 = preg_replace($pattern, $strIter, $strContent); // 返回值不能用$strContent,否则会将替换后的$strContent再次匹配,所以出错。       
    echo $str1."\r\n";
    }
    ?>
      

  9.   

    $strContent = preg_replace($pattern, $strIter, $strContent);第一次的时候,这里是把所有的/xNum/全部替换成了0,而不是依次替换!!!!
    当然都是0了。
      

  10.   

    哦,但是每次的strContent都是赋给的新值啊,刚才那段代码是我简写的,原始代码如下:
    function splitTable($DDLArr,$num,$fileName) { foreach($DDLArr as $tbName=>$strDDL) {
    print "写入$tbName/n/r";

    for( $iter=0;$iter<$num;$iter++ ) {
    $pattern = '/xNum/';

    $strIter = $iter;

    if( $iter<10 && $num>10 ){
    $strIter = "0".$iter;
    }

    $strDDL = preg_replace($pattern, $strIter, $strDDL);
    echo $strIter;
    echo $strDDL;

    writeUTF8($strDDL,$fileName); }//end for
    }//end foreach
    }非常感谢!