删除括号之间的文本PHP

我只是想知道如何删除一组括号和括号本身之间的文字在PHP中。

例如:

ABC(Test1)

我想删除(Test1),只留下ABC

谢谢

$string = "ABC (Test1)"; echo preg_replace("/\([^)]+\)/","",$string); // 'ABC ' 

preg_replace是一个基于perl的正则expression式replace例程。 这个脚本所做的是匹配所有出现的开括号,然后是任意数量的不是右括号的字符,再次是右括号,然后删除它们:

正则expression式细分:

 / - opening delimiter (necessary for regular expressions, can be any character that doesn't appear in the regular expression \( - Match an opening parenthesis [^)]+ - Match 1 or more character that is not a closing parenthesis \) - Match a closing parenthesis / - Closing delimiter 

没有正则expression式

 $string="ABC (test)" $s=explode("(",$string); print trim($s[0]); 
 $string = "ABC (Test1(even deeper) yes (this (works) too)) outside (((ins)id)e)"; $paren_num = 0; $new_string = ''; foreach($string as $char) { if ($char == '(') $paren_num++; else if ($char == ')') $paren_num--; else if ($paren_num == 0) $new_string .= $char; } $new_string = trim($new_string); 

它通过循环遍历每个字符,计算括号。 只有当$paren_num == 0 (当它在所有圆括号之外时)才会将字符附加到我们的结果string$new_string

民间,正则expression式不能用来parsing非常规的语言。 非常规语言是那些需要状态解释的语言(即记住当前打开多less个括号)。

所有上面的答案将失败,在这个string:“(你好(世界)你好吗”)。

阅读Jeff Atwood的parsingHtml The Cthulhu Way: http : //www.codinghorror.com/blog/archives/001311.html ,然后使用手写的parsing器(通过string中的字符循环,看看字符是否为括号,维护堆栈)或使用能够parsing上下文无关语言的词法分析器/parsing器。

另见维基百科有关“恰当匹配括号的语言”的文章: http : //en.wikipedia.org/wiki/Dyck_language

被接受的答案非常适合非嵌套的括号。 正则expression式的一个微小的修改使它能够嵌套括号。

 $string = "ABC (Test1(even deeper) yes (this (works) too)) outside (((ins)id)e)"; echo preg_replace("/\(([^()]*+|(?R))*\)/","", $string); 

最quik的方法(不含preg):

 $str='ABC (TEST)'; echo trim(substr($str,0,strpos($str,'('))); 

如果你不想在词尾修饰空格,只需从代码中删除修剪function。

 $str ="ABC (Test1)"; echo preg_replace( '~\(.*\)~' , "", $str );