如何使用 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)
\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;
这假定字符串不会为空,如果是,您将得到 m#
作为结果,除非您先检查。而且,字符串中只有数字。
您可以很容易地解决第一个问题。
$dna = empty($dna) ? '': 'm#'.implode(' m#', explode(' ', $dna));
我有一个用数字填充的字符串,我想在每个数字系列的前面添加一个字符:
$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)
\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;
这假定字符串不会为空,如果是,您将得到 m#
作为结果,除非您先检查。而且,字符串中只有数字。
您可以很容易地解决第一个问题。
$dna = empty($dna) ? '': 'm#'.implode(' m#', explode(' ', $dna));