Подтвердить что ты не робот

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

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

Например, мне нужно:

hello [quote="im sneaky"] world

становиться:

hello world

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

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

Я только что закончил с:

hello quote="im sneaky" world
4b9b3361

Ответ 1

[ и ] - специальные символы в регулярном выражении. Они используются для перечисления символов матча. [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 [of "sneaky"] text [with more "sneaky"] here an example text here.


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

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

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


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

Также обратите внимание, что все они могут потерпеть неудачу из-за неправильного ввода. Многократное [ и ] без совпадений может привести к неожиданному результату.

Ответ 2

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

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

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

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

:

Это круто

Ответ 3

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

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