Как удалить текст между квадратными скобками и скобками?
Например, мне нужен 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.
/(\\[.*\\])/