如何将字符串中的数字数据替换为不同的数字?

时间:2012-07-12 10:37:03

标签: php

有一个包含数字数据的字符串变量,比如$x = "OP/99/DIR";。数字数据的位置可以在任何情况下根据用户的需要通过在应用程序内部进行修改而改变,并且斜杠可以由任何其他字符改变;但数字数据是强制性的。如何将号码数据替换为不同的号码?示例OP/99/DIR已更改为OP/100/DIR

4 个答案:

答案 0 :(得分:2)

假设号码只出现一次:

$content = str_replace($originalText, $numberToReplace, $numberToReplaceWith);

仅更改第一次出现:

$content = str_replace($originalText, $numberToReplace, $numberToReplaceWith, 1);

答案 1 :(得分:2)

使用regex和preg_replace

$x="OP/99/DIR";
$new = 100;
$x=preg_replace('/\d+/e','$new',$x);

print $x;

答案 2 :(得分:2)

$string="OP/99/DIR";
$replace_number=100;
$string = preg_replace('!\d+!', $replace_number, $string);

print $string;

输出:

OP/100/DIR 

答案 3 :(得分:1)

最灵活的解决方案是使用preg_replace_callback(),这样你就可以用匹配做任何你想做的事情。这匹配字符串中的单个数字,然后将其替换为数字加一。

root@xxx:~# more test.php
<?php
function callback($matches) {
  //If there's another match, do something, if invalid
  return $matches[0] + 1;
}

$d[] = "OP/9/DIR";
$d[] = "9\$OP\$DIR";
$d[] = "DIR%OP%9";
$d[] = "OP/9321/DIR";
$d[] = "9321\$OP\$DIR";
$d[] = "DIR%OP%9321";

//Change regexp to use the proper separator if needed
$d2 = preg_replace_callback("(\d+)","callback",$d);

print_r($d2);
?>
root@xxx:~# php test.php
Array
(
    [0] => OP/10/DIR
    [1] => 10$OP$DIR
    [2] => DIR%OP%10
    [3] => OP/9322/DIR
    [4] => 9322$OP$DIR
    [5] => DIR%OP%9322
)