Удалить текст в скобках Переполнение стека

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

Пример :

ABC (Test1)

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

Спасибо

51

Решение

$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
136

Другие решения

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

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

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

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

$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,

11

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

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

Прочитайте Джефф Этвуд, парсинг Html Путь Ктулху: https://blog.codinghorror.com/parsing-html-the-cthulhu-way/, а затем используйте либо написанный вручную отобранный синтаксический анализатор (просматривайте символы в строке, посмотрите, является ли символ круглыми скобками или нет, поддерживает стек), либо используйте лексер / анализатор, способный анализировать язык без контекста.

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

4

Наиболее быстрый метод (без прега):

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

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

2
$str ="ABC (Test1)";
echo preg_replace( '~\(.*\)~' , "", $str );
1
По вопросам рекламы [email protected]