我有一个包含字母和数字的UTF8字符串。例如:
"Hello World 37. What? 24 last 6650"
我想只反转数字,但将数字保存在同一个地方。 输出应为:
"Hello World 73. What? 42 last 0566"
答案 0 :(得分:3)
echo preg_replace_callback('/\d+/', function (array $m) { return strrev($m[0]); }, $string);
答案 1 :(得分:0)
在我发布问题之前,我考虑过这个问题并得到了一个适合我的想法,所以我只是发布这个问题来丰富数据库。
function reverseNumbersInString($str){
$tokens = explode(" ", $str);
$res = "";
for ($i = 0; $i < sizeof($tokens); $i++){
if (intval($tokens[$i] > 0 )){
$tokens[$i] = strrev($tokens[$i]);
}
$res .= " " . $tokens[$i];
}
return $res;
}
答案 2 :(得分:0)
这应该这样做:
$stringWithReversedNumbers = preg_replace_callback(
'/\d+/',
function ($matches) {
return strrev($matches[0]);
},
$originalString
);
或者,如果您只想操作不同单词的数字(即不是另一个单词的一部分,如果您希望hello123goodbye
保持不变,因为123本身不是单词),将\d+
更改为\b\d+\b
答案 3 :(得分:0)
也许是这样的:
$string = "Hello World 37. What? 24 last 6650";
preg_match_all('/\d+/', $string, $matches, PREG_OFFSET_CAPTURE);
foreach ($matches[0] as $numberData) {
$numberArray = str_split($numberData[0]);
$reversedNumber = implode('', array_reverse($numberArray));
$string = substr_replace($string, $reversedNumber, $numberData[1], strlen($numberData[0]));
}