[
и ]
- специальные символы в регулярном выражении. Они используются для перечисления символов матча. [a-z]
соответствует любой строчной букве между 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 ]
Это более явно, но сложнее для чтения. Используя тот же текст в качестве примера, вы получите вывод не жадного выражения.
Обратите внимание, что ни одно из них не имеет прямого отношения к пробелу. Пробелы по обе стороны от [
и ]
останутся.
Также обратите внимание, что все они могут не работать из-за неправильного ввода. Несколько [
с и ]
с без совпадений могут привести к неожиданному результату.