Мне просто интересно, как я могу удалить текст между скобками и скобками в php.
Пример:
ABC (Test1)
Я бы хотел, чтобы он удалял (Test1) и оставлял только ABC
Спасибо
Мне просто интересно, как я могу удалить текст между скобками и скобками в php.
Пример:
ABC (Test1)
Я бы хотел, чтобы он удалял (Test1) и оставлял только ABC
Спасибо
$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
без регулярного выражения
$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
(когда он находится вне всех круглых скобок) добавляет символы к нашей результирующей строке, $new_string
.
Принятый ответ отлично подходит для не вложенных круглых скобок. Небольшое изменение в регулярном выражении позволяет работать с вложенными скобками.
$string = "ABC (Test1(even deeper) yes (this (works) too)) outside (((ins)id)e)";
echo preg_replace("/\(([^()]*+|(?R))*\)/","", $string);
Люди, регулярные выражения НЕ МОГУТ использоваться для анализа нерегулярных языков. Неправильными языками являются те, которые требуют интерпретации состояния (т.е. Запоминают, сколько скобок в настоящее время открыто).
Все приведенные выше ответы не будут выполнены в этой строке: "ABC (привет (мир), как вы)".
Прочтите Jeff Atwood Parsing Html Путь Cthulhu: http://www.codinghorror.com/blog/archives/001311.html, а затем используйте либо ручной письменный синтаксический анализатор (цикл через символы в строке, см., является ли символ скобкой или нет, поддерживать стек) или использовать lexer/parser, способный анализировать контекстно-свободный язык.
Также см. эту статью в википедии "язык правильно подобранных скобок: http://en.wikipedia.org/wiki/Dyck_language
Большинство методов quik (без preg):
$str='ABC (TEST)';
echo trim(substr($str,0,strpos($str,'(')));
Если вы не хотите урезать пробелы в конце слова, просто удалите функцию trim из кода.
$str ="ABC (Test1)";
echo preg_replace( '~\(.*\)~' , "", $str );