2011-03-07 21 views
2

我有一大堆的字符串像這樣的:Howto preg_replace在括號內的特定字符?

test; test2 (2;5%). 

我想現在用PHP做的是正確的「;」括號所以它看起來像:我試過

test; test2 (2,5%) - mention the ",". 

代碼:

$string = preg_replace("/\(.;.\)/", ",", $string); 

我的眼睛實際上是從谷歌上搜索這樣流血請幫我與:)

回答

6

1)所需(\

2)未在表達式中包含百分號

3)將具有已與更換整個括號表達式(括號包括)一個單一的,

4)Zimzat評價所指出的,這可能是一個更好的主意與\d+更換週期(.) ,它匹配數字而不是任何字符。

$string = preg_replace("/\((\d+);(\d+%)\)/", "($1,$2)", $string); 
+0

什麼使得。 a [^)]?怎麼說a +說多個號碼? – Zimzat 2011-03-07 21:43:56

+0

是的,但我會建議使用以下內容,以便匹配任意長度的數字而不是隻有一個數字:'preg_replace(「/ \(([1-9] {1} [0-9] *), ([0-9] * [1-9] {1})%\)/「,」($ 1,$ 2)「,$ string);'這也將確保該數字沒有前導或尾隨0。 – 2011-03-07 21:49:31

+0

@GigaWatt:「+」修飾符沒有得到那個嗎?我的意思是,'+'的意思是一個或多個 – elitalon 2011-03-07 21:53:29

0

你必須捕捉的人物旁邊;

$string = preg_replace('/\((\d+);(\d+%)\)/', "($1,$2)", $string); 
0

更換如逗號(中多次出現),我將使用此代碼

$text = preg_replace_callback("/\{((.*),(.*))\}/sim", function($matches){ 
    return str_replace(',', ':comma:', $matches[0]); 
    }, $text); 
相關問題