在字符串末尾增加整数

问题描述 投票:0回答:8

我有一个字符串“Chicago-Illinos1”,我想在其末尾添加一个,所以它将是“Chicago-Illinos2”。

注意:它也可能是Chicago-Illinos10,我希望它去Chicago-Illinos11,所以我不能做substr。

有什么建议的解决方案吗?

php string
8个回答
12
投票

一个非常简单的问题的复杂解决方案......

$str = 'Chicago-Illinos1';
echo $str++; //Chicago-Illinos2

如果字符串以数字结尾,则会递增该数字(例如:'abc123'++ = 'abc124')。

如果字符串以字母结尾,则该字母将递增(例如:'123abc'++ = '123abd')


8
投票

试试这个

preg_match("/(.*?)(\d+)$/","Chicago-Illinos1",$matches);
$newstring = $matches[1].($matches[2]+1);

(现在无法尝试,但应该可以)


2
投票
$string = 'Chicago-Illinois1';
preg_match('/^([^\d]+)([\d]*?)$/', $string, $match);
$string = $match[1];
$number = $match[2] + 1;

$string .= $number;

已测试,有效。


1
投票

爆炸也可以完成这项工作

<?php
$str="Chicago-Illinos1"; //our original string

$temp=explode("Chicago-Illinos",$str); //making an array of it
$str="Chicago-Illinos".($temp[1]+1); //the text and the number+1
?>

0
投票

我会使用正则表达式来获取字符串末尾的数字(对于Java,它是 [0-9]+$),增加它(int number = Integer.parse(yourNumberAsString) + 1 ),并与 Chicago-Illinos 连接(其余部分与用于查找数字的正则表达式不匹配)。


0
投票

您可以使用

preg_match
来完成此操作:

$name = 'Chicago-Illinos10';
preg_match('/(.*?)(\d+)$/', $name, $match);
$base = $match[1];
$num = $match[2]+1;
print $base.$num;

将输出以下内容:

Chicago-Illinos11

但是,如果可能的话,我建议在文本和数字之间放置另一个分隔字符。例如,如果您放置了一个管道,您可以简单地执行

explode
并获取数组的第二部分。那就简单多了。

$name = 'Chicago-Illinos|1';
$parts = explode('|', $name);
print $parts[0].($parts[1]+1);

如果字符串长度是一个问题(因此伊利诺伊州的拼写错误),您可以切换到州缩写。 (即

Chicago-IL|1


0
投票
$str = 'Chicago-Illinos1';
echo ++$str;

http://php.net/manual/en/language.operators.increment.php


0
投票

在不预先隔离数字字符串后缀的情况下,有两种选项可以增加它。

  1. ++$string
    $string++
    - 一元运算符允许值的递增和递减

  2. 从 PHP8.3 开始,可以以稍微更稳定的行为调用

    str_increment()
    ,但字符串本身必须完全是字母数字。请注意,如果您需要增加字符串数组,则使用这个新的本机函数允许函数迭代器(如
    array_map()
    )仅通过其名称来调用
    str_increment

现在是坏消息......

如果整个后缀数字通常会获得另一个数字,这两种技术都会破坏左相邻字符。例如,

a9
将增加到
b0
,而
z99
将变为
aa00

如果这还不足以让您担心,那么还存在增加类似于浮点值的字符串值的风险。字符串值

4567e4
将递增到浮点型值
45670001.0

阅读手册:https://www.php.net/manual/en/language.operators.increment.php


因为那些“方便”的技术相当不可靠,更好的通用方法是分离、递增和替换数字后缀。

您可以通过调用

preg_replace_callback()
来避免声明临时变量。我推荐这种技术的直接性和稳定性——它总是返回一个字符串。匹配整个数字后缀,递增它,然后用递增后的后缀替换原始后缀。无副作用。

代码:(演示

$string = 'Chicago41Illinos9';

var_export(
    preg_replace_callback(
        '/\d+$/',
        fn($m) => ++$m[0],
        $string
    )
);
// Chicago41Illinos10
© www.soinside.com 2019 - 2024. All rights reserved.