4

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

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

如何使用 PHP 和正则表达式来操作字符串,导致输出不包含任何括号或括号本身的内容?例如;

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

1 回答 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
于 2013-08-10T17:45:01.240 回答