簡體   English   中英

在PHP中使用正則表達式增加計數器

[英]Increment a counter with regex in 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*)\\)$類的東西匹配,但是我不知道如何匹配其余的字符串。

什么正則表達式可以完成這項工作?

好吧,我不喜歡這種解決方案,但是由於您已經提出了要求:

這是使用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:如果您的“字符串”實際上是多行文件的內容,請在$re中用\\Z替換$以匹配文件末尾。

在發布接受的答案的同時,我找到了一種方法,就像我最初想象的那樣(即:在單獨的組中匹配名稱和計數器)。 因此,我想我會將其發布為答案,即使@ wp78de的答案顯然更好。

其他方法

我必須在name組旁邊使用一個非捕獲組,因為負前行顯然無法量化: 例如

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM