Нужна помощь с регулярным выражением, чтобы удалить квадратные скобки и что-нибудь между

Как удалить текст между квадратными скобками и скобками?

Например, мне нужен hello [quote="im sneaky"] world

становиться

hello world

Вот что я пытаюсь использовать, но это не делает трюк

preg_replace("/[\[(.)\]]/", '', $str);

Я просто закончил с hello quote="im sneaky" world

благодаря

[и] являются специальными символами в регулярном выражении. Они используются для отображения символов матча. [az] соответствует любой строчной букве между «a» и «z». [03b] соответствует «0», «3» или «b». Чтобы соответствовать символам «[» и «]», вам нужно избежать их с помощью предыдущего \ .

В настоящее время ваш код говорит «заменить любой символ [](). пустой строкой» (переупорядочивается из порядка, в котором вы набрали их для ясности).


Жадный матч:

 preg_replace('/\[.*\]/', '', $str); // Replace from one [ to the last ] 

Жадный матч может совпадать с несколькими [s и] s. Это выражение примет an example [of "sneaky"] text [with more "sneaky"] here и превратит его в an example here .


Perl имеет синтаксис для не-жадного матча (вы, скорее всего, не хотите быть жадным):

 preg_replace('/\[.*?\]/', '', $str); 

Нежелательные спички пытаются поймать как можно меньше символов. Используя тот же пример: здесь an example [of "sneaky"] text [with more "sneaky"] here an example text here .


Только до первого следующего]:

 preg_replace('/\[[^\]]*\]/', '', $str); // Find a [, look for non-] characters, and then a ] 

Это более ясное, но труднее читать. Используя тот же текст примера, вы получите результат не-жадного выражения.


Обратите внимание, что ни одно из них явно не имеет пробела. Пространства по обе стороны от [и] останутся.

Также обратите внимание, что все из них могут выйти из строя для искаженного ввода. Несколько [s и] s без совпадений могут привести к неожиданному результату.

На всякий случай вы ищете рекурсивное удаление:

 $str = preg_replace("/\[([^\[\]]++|(?R))*+\]/", "", $str); 

Это преобразует это:

Это [текст [больше текста]] круто

к этому:

Это здорово

Я думаю, что на самом деле вам нужны парнеры для ваших внешних скобок, так как это группа. квадратные скобки представляют собой ряд выражений. Не знаете, как ввести его в SO.

 /(\\[.*\\])/