首页 > 解决方案 > 在 PHP 中使用正则表达式增加一个计数器

问题描述

我试图在 PHP 中的字符串末尾增加一个计数器。计数器总是在字符串末尾的括号之间,其余的可以是字面上的任何东西,这意味着甚至可能有一些看起来像计数器的东西(即:括号之间的数字),但具有不同的含义,不应该是改变。

例子:

  1. Foo (Bar) (666) (123):Foo (Bar) (666)是主要部分,123也是计数器。我想得到:Foo (Bar) (666) (124)(666)看起来像计数器,但由于它不位于字符串的末尾,因此不被视为这样。
  2. Lorem ipsum dolor sit amet (1337):Lorem ipsum dolor sit amet是主要部分,1337也是计数器。我想得到:Lorem ipsum dolor sit amet (1338)

确切的实现并不重要。我只想使用正则表达式来匹配主要部分和计数器,这样我就可以将它们放入变量中,递增计数器并重新构建字符串。

我可以轻松地将计数器与类似的东西匹配,\((\d*)\)$但我不知道如何匹配字符串的其余部分。

什么正则表达式可以完成这项工作?

标签: phpregexpattern-matching

解决方案


好吧,我不喜欢这个解决方案,但既然你要求它:

这是使用preg_replace_callback的解决方案:

(?<=\()\d+(?=\)$)

演示

示例代码

$re = '/(?<=\()\d+(?=\)$)/';
$str = 'Lorem ipsum dolor sit amet (1337)';

$result = preg_replace_callback(
        $re,
        function ($matches) {
            return ++$matches[0];
        },
        $str
    );
echo "The result of the substitution is ".$result;

PS:如果您的“字符串”实际上是多行文件的内容,请$\Zin替换$re以匹配文件的末尾。


推荐阅读