删除括号之间的文本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 );