如何使用 php 在字符串中用空格分隔的所有数字前面添加一个字符

How to add a character to the front of all numbers seperated by whitespace in a string using php

我有一个用数字填充的字符串,我想在每个数字系列的前面添加一个字符:

$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+)~', 'm#',$dna);

这给了我:

$dna = "273385m# 14093m# 1522520m#"

如何让它附加到前面?

您可以使用

preg_replace('~\d+~', 'm#[=10=]', $dna)

regex demo

\d+ 将匹配 1 个或多个数字的连串,m#[=13=] 将用 m# 和整个匹配值替换每个匹配项(用 [=15=] 反向引用).

参见 PHP demo:

$dna = "273385 14093 1522520 1759 277697 283096 1133193 191835 246752 204984 973590";
echo preg_replace('~\d+~', 'm#[=11=]', $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);

..还是一般情况? (我假设字符串的格式是数字组,由一个 space 分隔)

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;

Sandbox

这假定字符串不会为空,如果是,您将得到 m# 作为结果,除非您先检查。而且,字符串中只有数字。

您可以很容易地解决第一个问题。

   $dna = empty($dna) ? '': 'm#'.implode(' m#', explode(' ', $dna));