Точная замена символа

258
20 марта 2017, 10:42

Здравствуйте. Есть строка вида: 2,12,55,29,22,10,28 или 12,55,29,22,10,2

Каким образом заменить только цифру 2 ?

str_replace

меняет цифру 2 - везде. А нужно только там где она одна (2).

Answer 1

Другой вариант с регуляркой:

<?php
$s = '2,12,55,2,29,22,10,2';
echo preg_replace('/(?<!\d)2(?!\d)/', 'TWO', $s);

Использует негативный просмотр назад (?<!\d) и вперед (?!\d). В обоих случаях проверяется отсутствие цифры.

UPD

Для строки состоящей из цифр и запятых подойдет еще вариант с границей слов:

<?php
$s = '2,12,55,2,29,22,10,2';
echo preg_replace('/\b2\b/', 'TWO', $s);
Answer 2

Возможно попробовать такой вариант:

$str = '2,12,55,29,22,10,28';
$search = 2;
$replacement = 11111111;
$arr = explode(',', $str);
$str = implode(',', array_map(function($el) use ($search, $replacement) {
    return ($el == $search) ? $replacement: $el;
}, $arr));
echo $str;

Т.е. разделяем строку на составные части, далее пробегаем и изменяем нужный элемент на то, что хочешь, обратно склеиваем в строку.

Не самый эффективный способ, но всё-таки...

Answer 3

С помощью preg_replace можно выбрать число, окружённое не цифрами(\D)

$s = '2,12,55,2,29,22,10,2';
echo preg_replace('/(^|\D)2(\D|$)/', '$1TWO$2', $s);
// TWO,12,55,TWO,29,22,10,TWO
READ ALSO
Как оптимально проверить валидность json (php)

Как оптимально проверить валидность json (php)

Имеется большой json-файлНа json_decode уходит до 4х секунд и такая скорость очень не устраивает, тем более что потребности именно парсить его и получать...

249
Как создать объект на удаленной машине в нужном процессе

Как создать объект на удаленной машине в нужном процессе

Имеется изолированная полностью контролируемая локальная сеть с машинами, вопросы безопасности не имеют значенияЕще есть несколько комовских...

243
Вычислить сумму

Вычислить сумму

Дана последовательность целых чисел x1,

231
работа с функцией c++

работа с функцией c++

есть функция

188