【问题标题】:preg_replace only first number in stringpreg_replace 仅字符串中的第一个数字
【发布时间】:2013-07-24 02:57:18
【问题描述】:

首先:我的正则表达式非常糟糕,我已经在网上找到了这些。

我想增加字符串中的第一个数字,例如$teststring = "abcd1234efgh56";

我已经找到了以下内容:

preg_replace( "|(\d+)|e", "$1+1", $teststring);

将导致abcd1235efgh57

preg_replace( "|(\d+)(?!.*\d)|e", "$1+1", $teststring);

将导致abcd1234efgh57

但是如何只增加第一个数字(在示例中为 1234),同时保持字符串的其余部分不变?

非常感谢您

【问题讨论】:

    标签: php string numbers preg-replace increment


    【解决方案1】:

    查看文档:php.net manual on preg_replace

    使用第四个参数限制替换次数

    【讨论】:

      【解决方案2】:

      你可以使用:

      preg_replace('/([^0-9]*)(\d+)(.*)/e', '"$1" . ($2+2) . "$3"' , $str, 1);

      这将匹配第一个数字之前的所有非数字字符(如果有)为$1,第一个数字为$2,所有后续字符(如果有)为$3

      然后输出在第一个数字上添加2 的字符串(您可以将$2+2 更改为$2+NUMBER)。

      函数中的最后一个参数1 将重复次数限制为仅1 次...

      【讨论】:

        【解决方案3】:

        preg_replace的第四个可选参数是limit:

        preg_replace($search, $replace, $subject, $limit)

        您可以为您的情况添加 1..

        它会给你

        $teststring = 'abcd1235efgh56'

        【讨论】:

          【解决方案4】:

          试试

          preg_replace('/^([^0-9]+)?([0-9]+)([^0-9]+)?/', "$2+1", $teststring);
          

          【讨论】:

          • 这只有在字符串中正好有两个数字时才有效。
          • 刚刚测试过,它适用于字符串中的 1 个或多个数字
          • 啊,没关系。我被不必要的[^0-9]+弄糊涂了。
          • 我刚试了一下,输出是1234+156。这甚至都不正确。
          猜你喜欢
          • 1970-01-01
          • 2013-02-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-01-22
          相关资源
          最近更新 更多