Мне просто интересно, как я могу удалить текст между круглыми скобками и сами скобки в php.
Пример :
ABC (Test1)
Я бы хотел удалить (Test1) и оставить только ABC
Спасибо
Мне просто интересно, как я могу удалить текст между круглыми скобками и сами скобки в php.
Пример :
ABC (Test1)
Я бы хотел удалить (Test1) и оставить только ABC
Спасибо
$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
A (B (C) D)
, и оставляет вам A D
- person David K.; 12.06.2014
Принятый ответ отлично подходит для невложенных круглых скобок. Небольшая модификация регулярного выражения позволяет ему работать с вложенными круглыми скобками.
$string = "ABC (Test1(even deeper) yes (this (works) too)) outside (((ins)id)e)";
echo preg_replace("/\(([^()]*+|(?R))*\)/","", $string);
$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
.
без регулярного выражения
$string="ABC (test)"
$s=explode("(",$string);
print trim($s[0]);
Ребята, регулярные выражения НЕ МОГУТ использоваться для синтаксического анализа нерегулярных языков. Нерегулярные языки - это языки, для интерпретации которых требуется состояние (т.е. запоминание количества открытых скобок).
Все вышеперечисленные ответы не пройдут с этой строкой: «ABC (привет (мир), как дела)».
Прочтите книгу Джеффа Этвуда по синтаксическому анализу «Путь Ктулху»: https://blog.codinghorror.com/parsing-html-the-cthulhu-way/, а затем используйте написанный от руки синтаксический анализатор (прокрутите символы в строке, посмотрите, является ли символ круглой скобкой или нет, сохраните стек) или используйте лексер / синтаксический анализатор, способный анализировать контекстно-свободный язык.
Также см. Эту статью в Википедии о «языке правильно подобранных скобок»: https://en.wikipedia.org/wiki/Dyck_language
\(([^()]*+|(?R))*\)
отлично подходит для произвольно вложенных круглых скобок.
- person Tim Pietzcker; 10.08.2013
Самый быстрый метод (без preg):
$str='ABC (TEST)';
echo trim(substr($str,0,strpos($str,'(')));
Если вы не хотите обрезать пробелы в конце слова, просто удалите функцию обрезки из кода.