2017-01-11 2 views
1

У меня есть вход, как это: $input="12050301000000000000";Заменить все строки, за исключением двух индексов

Я пытаюсь использовать preg_replace изменить каждую вещь в моем входе 0 за исключением двух символов, на которые ссылаются их индексами.

Например, я хочу, чтобы заменить все, кроме первого и второго символов 0.

Я попытался это:

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

Почему не проще: '$ выход = str_repeat ('0', STRLEN ($ вход)); $ output [$ index1] = $ input [$ index1]; $ output [$ index2] = $ input [$ index2]; ', что было бы намного легче читать и понимать, чем regexp. –

+1

Не могу получить более приятный ответ, чем тот, и это тоже в комментарии! –

+1

@MarkBaker Мне нравится ваш ответ, можете ли вы опубликовать его в качестве ответа, чтобы я мог его принять. –

ответ

-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

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; 
} 

Функция принимает произвольное число индексы (int) после $ string и $ replace

$input="12050301000000000000"; 
echo $input; 
echo '<br>'; 
echo replace($input, 'a', 1, 3, 5, 7); 
0

это работа для меня

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

Спасибо ..

+0

если используется preg_replace ("/[^".$ index1." +?! ^]/", '8', $ input); это будет 08080808000000000000 заменить без замены нуля спасибо .. –

Смежные вопросы