-3

我有一个包含字母和数字的 UTF8 字符串。例如:

"Hello World 37. What? 24 last 6650"

我只想反转数字,但将数字保持在同一个地方。输出应该是:

"Hello World 73. What? 42 last 0566"

4

4 回答 4

3
echo preg_replace_callback('/\d+/', function (array $m) { return strrev($m[0]); }, $string);
于 2013-11-05T11:15:20.750 回答
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;
}
于 2013-11-05T11:15:20.530 回答
0

这应该这样做:

$stringWithReversedNumbers = preg_replace_callback(
    '/\d+/',
    function ($matches) {
        return strrev($matches[0]);
    },
    $originalString
);

或者,如果您只想对不同单词的数字进行操作(即不是另一个单词的一部分,如果您想hello123goodbye保持不变,因为 123 本身不是一个单词),请更改\d+\b\d+\b

于 2013-11-05T11:23:09.857 回答
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]));
}
于 2013-11-05T11:34:20.523 回答