PHP去除字符串中所有的括号

4

我的PHP脚本调用Freebase API并输出一个字符串,该字符串可以包含任意数量的开放和关闭括号。每组开放和关闭括号也可以包含任意数量的自身开放和关闭括号。例如;

$string = "random string blah (a) (b) blah blah (brackets (within) brackets) blah";

我该如何使用PHP和正则表达式来操作字符串,使输出结果不包含任何括号及其内部内容?例如:

$string = "random string blah blah blah blah";

你有尝试过任何方法吗? - Jerry
2
你想要删除哪个符号?{}表示花括号,[]表示方括号,()表示圆括号。 - DevlshOne
请阅读以下内容:https://dev59.com/MHI95IYBdhLWcg3wvwoQ - James
1个回答

9
你可以使用递归正则表达式:
$result = preg_replace('/\(([^()]*+|(?R))*\)\s*/', '', $subject);

说明:

\(       # Match (
(        # Match the following group:
 [^()]*+ # Either any number of non-parentheses (possessive match)
|        # or
 (?R)    # a (recursive) match of the current regex
)*       # Repeat as needed
\)       # Match )
\s*      # Match optional trailing whitespace

这是一个很好的答案!需要注意的一点是,最终结果可能会有一些额外的空格,这可能不是你想要的。例如,使用此正则表达式进行测试字符串将产生“random_string_blah___blah_blah__blah”,而不是“random_string_blah_blah_blah_blah”,因此请确保在必要时删除这些额外的空格。(因为评论中没有保留空格,所以用下划线替换了空格)。 - Nick Coons
@NickCoons:说得好。我已经添加了一个空格移除器 :). 专业提示:键入 Alt + (Keypad 0 Keypad 1 Keypad 6 Keypad 0) 可以创建不间断空格。 - Tim Pietzcker
@TimPietzcker:谢谢你的提示。我的键盘上的数字键盘坏了,所以我必须从另一个系统尝试这个。 - Nick Coons

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接