替换除两个索引之外的字符串中的all

时间:2017-01-11 09:04:34

标签: php preg-replace

我有这样的输入: $input="12050301000000000000";

我正在尝试使用preg_replace将输入中的所有内容更改为0,除了索引引用的两个字符。

例如,我想将除第一个和第二个字符之外的所有字符都替换为0。

我试过了:

$input="02050301000000000000";
$index1=0;
$index2=1;
$output= preg_replace('/(?!^'.$index1.')/', '0', $input);

3 个答案:

答案 0 :(得分:0)

function replace($string, $replace) {
    $args = func_get_args();
    $string = array_shift($args);
    $replace = array_shift($args);
    $len = strlen($string);
    $i = 0;
    $result = '';
    while($i < $len) {
        $result .= !in_array($i, $args) ? $replace : $string[$i];
        $i++;
    }
    return $result;
}

该函数在$ string和$ replace

之后接受任意数量的索引(int)
$input="12050301000000000000";
echo $input;
echo '<br>';
echo replace($input, 'a', 1, 3, 5, 7);

答案 1 :(得分:0)

这对我有用

$input="02050301000000000000";
$index1=0;
$output = preg_replace("/[^".$index1."+?!^]/", '0', $input );

谢谢..

答案 2 :(得分:-1)

假设您要替换1和3索引值2和5:

$string = '02050301000000000000';
$patterns = array();
$patterns[1] = '/2/';
$patterns[3] = '/5/';
$replacements = array();
$replacements[1] = '0';
$replacements[3] = '0';
$output = preg_replace($patterns, $replacements, $string);
var_dump($output);

<强>输出: 2和5用0代替。

string(20) "00000301000000000000"
  有关更多详细信息,请查看在preg_replace中使用索引数组: http://php.net/manual/en/function.preg-replace.php