Php 删除括号之间的文本

Php 删除括号之间的文本,php,text,parentheses,Php,Text,Parentheses,我只是想知道如何在php中删除一组括号和括号之间的文本 例如: ABC(测试1) 我想把它删除(Test1),只留下ABC 谢谢 preg_replace是一个基于perl的正则表达式替换例程。此脚本的作用是匹配所有出现的左括号,后跟任意数量的字符(不是右括号),然后再后跟右括号,然后删除它们: 正则表达式细分: / - opening delimiter (necessary for regular expressions, can be any character that doesn't

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

例如:

ABC(测试1)

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

谢谢

preg_replace
是一个基于perl的正则表达式替换例程。此脚本的作用是匹配所有出现的左括号,后跟任意数量的字符(不是右括号),然后再后跟右括号,然后删除它们:

正则表达式细分:

/  - 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
没有正则表达式

$string="ABC (test)"
$s=explode("(",$string);
print trim($s[0]);

伙计们,正则表达式不能用来解析非正则语言。非正则语言是那些需要状态来解释的语言(即记住当前打开了多少括号)

以上所有答案都将在以下字符串上失败:“ABC(你好(世界)你好吗)”

阅读Jeff Atwood的用Cthulhu的方式解析Html:,然后使用手工编写的解析器(遍历字符串中的字符,查看字符是否为括号,维护堆栈)或使用能够解析上下文无关语言的词法分析器/解析器

另请参阅维基百科关于“正确匹配括号的语言:


它通过循环每个字符,计算括号来工作。只有当
$paren_num==0
(当它位于所有括号之外)时,才会将字符附加到结果字符串中,
$new_string
接受的答案对于非嵌套括号非常有效。对正则表达式稍加修改,就可以处理嵌套的括号

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


如果您不想修剪单词末尾的空格,只需从代码中删除修剪函数。

您不应该尝试转义字符类中的)。不幸的是,这不会删除嵌套的括号,如
A(B(C)D)
,如果您处理文本(如从我的注释中间删除此括号),则留给您
A D
-那么这个函数就可以了。嵌套括号通常不会出现在文本字符串中,至少不会出现在英语中,而是出现在数学公式中。@cmptrgeekken感谢您的简要总结:)PHP的正则表达式并不局限于常规语言<代码>\([^()]*+|(?R))*\)与任意嵌套的括号匹配得很好。很好的标注。关于这个主题的广泛信息:这适用于“ABC(测试)”,但在“ABC(测试)DEF(更难的测试)”中失败,它变得非常非常混乱。我喜欢这个!不要忘记替换结果字符串中可能留下的额外空格,尽管这是迄今为止我找到的最佳解决方案。我也很好奇,如果我不小心留下了一个流浪的“(”),会发生什么。它做了我认为它会做的事情:别管它。结果显示了一点额外的文本,但它没有破坏任何东西。我很高兴。
$str ="ABC (Test1)";    
echo preg_replace( '~\(.*\)~' , "", $str );      
$string = "ABC (Test1(even deeper) yes (this (works) too)) outside (((ins)id)e)";
echo preg_replace("/\(([^()]*+|(?R))*\)/","", $string);
$str='ABC (TEST)';
echo trim(substr($str,0,strpos($str,'(')));
$str ="ABC (Test1)";    
echo preg_replace( '~\(.*\)~' , "", $str );