У меня есть строка, заполненная числами, и я пытаюсь добавить символ в начало каждой серии чисел:
$dna = "273385 14093 1522520 1759 277697 283096 1133193 191835 246752 204984 973590"
но я хочу закончить с:
$dna = "m#273385 m#14093 m#1522520 m#1759 m#277697 m#283096 m#1133193 m#191835 m#246752 m#204984 m#973590"
самое близкое, что я получил, использует
$dna= preg_replace('~(\w+)~', '$1m#',$dna);
что дает мне:
$dna = "273385m# 14093m# 1522520m#"
Как я могу заставить его добавить на передний план?






Вы можете использовать
preg_replace('~\d+~', 'm#$0', $dna)
См. демонстрация регулярных выражений
\d+ будет сопоставлять серии из 1 или более цифр, а m#$0 заменит каждое совпадение на m# и полное значение совпадения (упомянутое обратной ссылкой $0).
См. демонстрация PHP:
$dna = "273385 14093 1522520 1759 277697 283096 1133193 191835 246752 204984 973590";
echo preg_replace('~\d+~', 'm#$0', $dna);
// => m#273385 m#14093 m#1522520 m#1759 m#277697 m#283096 m#1133193 m#191835 m#246752 m#204984 m#973590
Вы можете использовать str_replace, чтобы внести изменения.
$dna = "273385 14093 1522520 1759 277697 283096 1133193 191835 246752 204984 973590";
$dna = 'm#' . str_replace(' ',' m#',$dna);
..или общий случай? (Я предполагаю, что формат строки представляет собой группы цифр, разделенных одним пробелом)
define('DNA_SEPARATOR', ' ');
define('DNA_PREFIX', 'm#');
$dna = "273385 14093 1522520 1759 277697 283096 1133193 191835 246752 204984 973590";
$arr = explode(DNA_SEPARATOR, $dna);
// In case you're not sure it's all groups of digits
// $arr = array_filter($arr, function($v) { return is_numeric($v); });
$arr = array_map(function($v) { return DNA_PREFIX.$v; }, $arr);
$dna = implode(DNA_SEPARATOR, $arr);
Вот способ, который не упоминается (не регулярное выражение)
$dna = "273385 14093 1522520 1759 277697 283096 1133193 191835 246752 204984 973590";
$dna = 'm#'.implode(' m#', explode(' ', $dna));
echo $dna;
Это предполагает, что строка не будет пустой, если это так, вы получите m# в результате, если вы сначала не проверите. И что в строке только цифры.
Вы можете легко исправить первое.
$dna = empty($dna) ? '': 'm#'.implode(' m#', explode(' ', $dna));