2016-02-02 70 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; 
?> 

输出将是: “你好,我的名字是弗兰克”