删除 ( 和 ) 之间的所有内容

Delete All Between ( and )

我想替换 () 之间的所有内容。它也适用于此 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)"

它在第一个“)”后停止。难不成把括号里面的括号也删掉了?

匹配以第一个 ( 开头的所有内容,然后回溯到最后出现的 ):

\(.*\)

注意: * 必须贪心才能起作用。因此,请确保未设置 modifier U(默认)。


如果您的字符串可以包含多次出现的独立括号子字符串,即 "Hello (my name is) Frank (nicer (guy) thank you)",那么您需要 recursive pattern.

那里的例子\(((?>[^()]+)|(?R))*\)效果很好。

这是适合您的代码:

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

输出将是:"Hello my name is Frank"