删除括号PHP之间的文本

时间:2010-02-01 02:45:16

标签: php text parentheses

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

示例:

ABC(Test1)

我希望删除(Test1)并只留下ABC

由于

7 个答案:

答案 0 :(得分:145)

$string = "ABC (Test1)";
echo preg_replace("/\([^)]+\)/","",$string); // '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

答案 1 :(得分:13)

接受的答案适用于非嵌套括号。对正则表达式稍作修改就可以使用嵌套括号。

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

答案 2 :(得分:12)

没有正则表达式

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

答案 3 :(得分:11)

$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(当它在所有括号外)时,它才会将字符附加到我们生成的字符串$new_string

答案 4 :(得分:4)

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

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

阅读Jeff Atwood的Parsing Html The Cthulhu Way:https://blog.codinghorror.com/parsing-html-the-cthulhu-way/,然后使用手工编写的解析器(循环遍历字符串中的字符,查看字符是否是括号,保持堆栈)或使用能够解析无上下文语言的词法分析器/解析器。

另请参阅此维基百科关于“正确匹配的括号语言”的文章:https://en.wikipedia.org/wiki/Dyck_language

答案 5 :(得分:2)

大多数quik方法(不含preg):

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

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

答案 6 :(得分:1)

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