我只是想知道如何在php中删除一组括号和圆括号之间的文本。
示例:
ABC(Test1)
我希望删除(Test1)并只留下ABC
由于
答案 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 );