2012-08-03 87 views
0

我想查找一個字符串中的所有數字並向它們添加50個數字。在一個字符串中查找數字,並向其中添加50個

所以我有這樣的開始與:

'text' => string 'Word (9), WordSomething (5)' 
'text' => string 'Word (15)' 

結果:

'text' => string 'Word (59), WordSomething (55)' 
'text' => string 'Word (65)' 
+0

有一些簡單的方法來分辨某個號碼開始或結束? (如括號) – Mitchell 2012-08-03 17:51:25

回答

9

您可以使用正則表達式此捕獲括號,然後之間的數字使用preg_replace_callback()應用您自己的自定義回調:

$result = preg_replace_callback('/\((\d+)\)/', function($match) { 
    return '(' . ($match[1] + 50) . ')'; 
}, $string); 

因此,考慮到該輸入字符串:

Word (9), WordSomething (5) 

輸出will be

Word (59), WordSomething (55) 

對於可變輸入,使用一個封閉件:

$number = 50; 
$result = preg_replace_callback('/\((\d+)\)/', function($match) use($number) { 
    return '(' . ($match[1] + $number) . ')'; 
}, $string); 
+0

似乎不可能爲50使用一個變量。我試過雙引號,即$ match [1] +「$ number」,這也不起作用。任何方式讓50成爲一個變量? – flux 2012-08-03 18:54:25

+0

@flux [您可以添加'global $ number;返回....'那麼它的工作原理: - )](http://sk.php.net/manual/en/function.preg-replace-callback.php#90021) – Stano 2012-08-03 19:05:06

+0

@flux - 我已經更新了我的答案使用閉包來允許'$ number'成爲一個變量。 – nickb 2012-08-03 19:15:05

1

編輯:如果你對正則表達式有一種非理性的恐懼,我認爲這應該工作。

EDIT2:這裏是完成和工作的Java代碼:http://pastebin.com/Z6uyDizz

我pseduo java代碼:

var str = "Some3people6love20code102" 
var newstr = "" 
var tmp = "" 

for (int i = 0; i<str.length; i++){ 
    if((int)str[i] >= 48 && (int)str[i] <= 57){ 
     tmp += str[i] 
    }else{ 
     newstr+=((Integer.parseInt(tmp)+50)+""); 
     newstr+=str[i] 
     tmp = ""; 
    } 
} 
+1

我只是修復了所有代碼,所以它在java中工作。它的工作原理,但考慮到有括號,正則表達式應該更快。完成的代碼需要進行一些邏輯修改,例如,如果字符串以數字結尾,則需要添加該代碼。但除此之外,我認爲這裏的邏輯應該使這個解決方案很容易理解。今天是個好日子! – Mitchell 2012-08-03 18:08:21

+1

正則表達式也適用於沒有括號的情況。只需匹配任何重複的數字('\ d')。 – knittl 2012-08-03 18:23:32

+0

相應地編輯了我的答案。 :) – Mitchell 2012-08-03 18:25:56

相關問題