弱弱的第三问: 很简单的正则问题是这样的, 要匹配的string是这样#^\#DT([0-9])$#\\1便是那个匹配数字我想将那个匹配的数字作为array的key$string = '#DT1';
$array['one'] = array('1' => 'a', '2' => 'b');
echo preg_replace('#^\#DT([0-9])$#', $array['one']['\\1'], $string);为什么我不能得到预期中的结果 -> a难道一定要这样:$key = preg_replace('#^\#DT([0-9])$#', '\\1', $string);
echo $array['one'][$key];

解决方案 »

  1.   


    <?php
    $string = '#DT1';
    preg_match('/^\#DT(?P<one>\d)$/',$string , $mats);
    var_export($mats);
    ?>array (
      0 => '#DT1',
      'one' => '1',
      1 => '1',
    )
      

  2.   

    不, 我的意思是想在preg_replace一句中完成转换preg_replace('#^\#DT([0-9])$#', $array['one']['\\1'], $string);怎样修改这句句子才能达到预期中的效果?
      

  3.   


    <?php>
    $string = '#DT1';
    $array['one'] = array('1' => 'a', '2' => 'b');
    echo preg_replace('#^\#DT([0-9])$#', $array['one']['1'], $string);
    ?>好像这样子也行的
      

  4.   

    如果 string 变了 #DT2 / #DT3 / #DT4 ......那便没有了 key 随 string 改变的目的
      

  5.   


    <?php
    $str = '#DT1';
    $arr['one'] = array('1' => 'a', '2' => 'b');
    echo preg_replace('/^#DT([0-9])$/e', "\$arr['one']['\\1']", $str);
    $str = '#DT2';
    echo preg_replace('/^#DT([0-9])$/e', "\$arr['one']['\\1']", $str);
    ?>
    另提示一下尽量不要使用关键词做变量名。
    以避免预想不到的问题。
      

  6.   

    echo preg_replace('#^\#DT([0-9])$#e', "\$array['one']['\\1']", $string);这样是不是好些?
    echo $array['one'][preg_replace('#^\#DT([0-9])$#e', '\\1', $string)];