Подтвердить что ты не робот

Удалить текст между скобками PHP

Мне просто интересно, как я могу удалить текст между скобками и скобками в php.

Пример:

ABC (Test1)

Я бы хотел, чтобы он удалял (Test1) и оставлял только ABC

Спасибо

4b9b3361

Ответ 1

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

preg_replace - это обычная процедура замены регулярных выражений на основе perl. То, что делает этот script, совпадает со всеми вхождениями открывающей скобки, за которым следует любое количество символов, а не закрывающая скобка, и снова следует закрывающая скобка, а затем удаляет их:

Распределение регулярных выражений:

/  - 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

Ответ 2

без регулярного выражения

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

Ответ 3

$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

Принятый ответ отлично подходит для не вложенных круглых скобок. Небольшое изменение в регулярном выражении позволяет работать с вложенными скобками.

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

Ответ 5

Люди, регулярные выражения НЕ МОГУТ использоваться для анализа нерегулярных языков. Неправильными языками являются те, которые требуют интерпретации состояния (т.е. Запоминают, сколько скобок в настоящее время открыто).

Все приведенные выше ответы не будут выполнены в этой строке: "ABC (привет (мир), как вы)".

Прочтите Jeff Atwood Parsing Html Путь Cthulhu: http://www.codinghorror.com/blog/archives/001311.html, а затем используйте либо ручной письменный синтаксический анализатор (цикл через символы в строке, см., является ли символ скобкой или нет, поддерживать стек) или использовать lexer/parser, способный анализировать контекстно-свободный язык.

Также см. эту статью в википедии "язык правильно подобранных скобок: http://en.wikipedia.org/wiki/Dyck_language

Ответ 6

Большинство методов quik (без preg):

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

Если вы не хотите урезать пробелы в конце слова, просто удалите функцию trim из кода.

Ответ 7

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