2016-01-07 5 views
3

Необходимо удалить скобки и текст в нем. Пока что это работает. Удаляет весь текст, начиная с скобки. Мой код:PHP REGEX удалить скобки и текст в скобках

$lines = preg_replace("/\(([^\d]+)/", '', $lines); 

Например, текст:

Some random words (word1/word2/word3) aaaa 

код удаляет весь текст после скобки тоже,

Some random words 

но то, что мне нужно сделать, это (то, что он должен выглядеть например:

Some random words aaaa 

ответ

3
/\([^()]*\)/ 
  • \( - открывающая скобка
  • [^()]* - столько символов, сколько возможно, которые не являются кронштейны
  • \) - закрывающая скобка

При необходимости можно удалить один пробел в конце (/\([^()]*\) ?/) так что у вас не будет двух мест, где произошло удаление.


Обратите внимание, что это обыкновение обрабатывать случаи вложенных скобок, как:

foo (bar (baz) quiz) 

Чтобы сделать это, вы должны быть немного более творческим:

(?<no_brackets>[^()]*){0}(?<balanced_brackets>\(\g<no_brackets>\)|\(\g<no_brackets>\g<balanced_brackets>\g<no_brackets>\)) 

See it in action

2

Вам не хватает дополнительного \) в конце вашего выражения. Как и в случае, ваше выражение начнет соответствовать моменту, когда он найдет открытую скобку и продолжит движение.

+0

Удаление одного места для поддержания расстояния между словами тоже поможет. –

Смежные вопросы