如何将字符串的数字部分增加一个?

tam*_*125 15 php regex string

我有一个由数字组成的字符串,有时是字母.

示例AF-1234345ww.

我必须得到数字部分并将其递增1.
我怎样才能做到这一点?可能与正则表达式?

cod*_*ict 28

您可以使用preg_replace_callback:

function inc($matches) {
    return ++$matches[1];
}

$input = preg_replace_callback("|(\d+)|", "inc", $input);
Run Code Online (Sandbox Code Playgroud)

基本上,您使用正则表达式匹配字符串的数字部分,\d+并将其替换为回调函数返回的值,该函数返回递增的值.

Ideone链接

或者这是可以做到用preg_replace()e修改为:

 $input = preg_replace("|(\d+)|e", "$1+1", $input);
Run Code Online (Sandbox Code Playgroud)

Ideone链接

  • @codaddict:你不觉得回调是一个"小"开销吗?为什么不使用常规`+ 1`? (3认同)
  • 根据PHP文档,在PHP 7中删除了`e`修饰符,请参阅http://php.net/manual/en/function.preg-replace.php (3认同)

Mav*_*elo 6

如果字符串以数字字符结尾,就这么简单...

$str = 'AF-1234';
echo $str++; //AF-1235
Run Code Online (Sandbox Code Playgroud)

尽管结果可能不是您期望的那样,但与“ 345ww”的工作方式相同。

$str = '345ww';
echo $str++; //345wx
Run Code Online (Sandbox Code Playgroud)

@ tampe125

如果递增以数字结尾的字符串,则此示例可能是满足您需求的最佳方法。

$str = 'XXX-342';
echo $str++; //XXX-343
Run Code Online (Sandbox Code Playgroud)


小智 5

这是一个通过对值进行预增量对我有用的示例

$admNo = HF0001;
$newAdmNo = ++$admNo;
Run Code Online (Sandbox Code Playgroud)

上面的代码会输出 HF0002