Мне просто интересно, как я мог удалить текст между набором круглых скобок и самими скобками в php.Удалить текст между скобками PHP
Пример:
ABC (Test1)
Я хотел бы, чтобы удалить (Test1) и оставить только ABC
Благодаря
Мне просто интересно, как я мог удалить текст между набором круглых скобок и самими скобками в php.Удалить текст между скобками 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
без регулярных выражений
$string="ABC (test)"
$s=explode("(",$string);
print trim($s[0]);
Быстро и грязно. Мне это нравится. –
Folks, регулярные выражения не могут быть использованы для анализа нерегулярные языков. Неправильными языками являются те, которые требуют интерпретации состояния (т. Е. Запоминают, сколько скобок в настоящее время открыто).
Все приведенные выше ответы не будут выполнены в этой строке: «ABC (привет (мир), как вы)».
Прочитайте партитуру Джеффа Этвуда: Путь Ктулху: http://www.codinghorror.com/blog/archives/001311.html, а затем используйте либо ручной написанный синтаксический анализатор (проведите по символам в строке, посмотрите, является ли символ скобкой или нет, поддерживайте стек), либо используйте lexer/parser, способный анализировать контекстно-свободный язык.
Также см эту статью Википедии на «языке правильно согласованной скобкой:» http://en.wikipedia.org/wiki/Dyck_language
Регулярные выражения PHP не ограничиваются регулярными языками. '\ (([^()] * + | (? R)) * \)' отлично подходит для произвольно вложенных круглых скобок. –
Хорошая выноска. Обширная информация по теме: http://php.net/manual/en/regexp.reference.recursive.php –
$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
.
Удивительно, спасибо ^^ – whitesiroi
Принятый ответ отлично подходит для не вложенных круглых скобок. Небольшое изменение в регулярном выражении позволяет работать с вложенными скобками.
$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,'(')));
Если вы не хотите обрезать пробелы в конце слова, просто удалите декоративную функцию из кода.
$str ="ABC (Test1)";
echo preg_replace('~\(.*\)~' , "", $str);
wow: O Быстрый ответ! Благодаря! Не могли бы вы немного объяснить это? Я действительно не понимаю, что вы сделали. –
Вы не должны пытаться убежать в свой класс символов. – mopoke
Это регулярное выражение. Трудно объяснить, хе-хе. – metrobalderas