2016-02-02 103 views
0

我想替換()之間的所有內容。它也適用於這個preg_replace()。全部刪除(和)

$return = preg_replace("/\([^)]+\)/", "", $return); 

如果我$return就像"Hello my name is Frank (nicer guy)"

字符串爲"Hello my name is Frank"

但在情況下的括號也是未來圓括號這是行不通的。例如:

之前:"Hello my name is Frank (nicer (guy) thank you)"

"Hello my name is Frank thank you)"

它停止後的第一個 「)」。它是否有可能刪除圓括號內的圓括號?

回答

2

匹配一切與第一(開始,再原路返回到)最後一次出現:

\(.*\) 

注:*必須是貪婪的這個工作。所以請確保沒有設置未認可的modifierU(默認)。


如果你的字符串可以包含獨立的子串的多次出現,即"Hello (my name is) Frank (nicer (guy) thank you)",那麼你需要一個recursive pattern

示例\(((?>[^()]+)|(?R))*\)那裏工作得很好。

0

下面的代碼對你:

<?php 
    $in = '"Hello my name is Frank (nicer guy)"'; 
    $out = preg_replace('/\s\(.*\)/','',$in); 
    echo $out; 
?> 

輸出將是: 「你好,我的名字是弗蘭克」