2013-07-24 23 views
0

首先:我對正則表達式非常不滿,我已經在網上找到了這些正則表達式。preg_replace僅字符串中的第一個數字

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

我已經發現:

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

將導致abcd1235efgh57

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

將導致abcd1234efgh57

但我怎麼僅增加第一號(1234該示例),而留下的字符串的其餘部分是?

非常感謝你提前

回答

0

數量嘗試

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

這隻會在字符串中只有兩個數字時才起作用。 – Barmar

+0

剛剛測試過它,它與字符串中的一個或多個數字一起工作 – MajorCaiger

+0

啊,別介意。我被不必要的'[^ 0-9] +'弄糊塗了。 – Barmar

0

你可以使用:

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

這將所述第一數目爲$1,第一個數字爲$2,和所有隨後的字符(如果有的話)作爲$3之前匹配所有非數字字符(如果有的話)。

然後輸出字符串2添加到第一個數字(您可以將$2+2更改爲$2+NUMBER)。

函數中的最後一個參數1限制了重複到只有1次......

0

的preg_replace的可選的第四個參數是限制:

的preg_replace($搜索,替換$,$主題, $限制)

你可以把1爲你的情況..

它會給你

$ teststri ng ='abcd1235efgh56'

相關問題