Как я могу удалить текст из-за квадратных скобок и самих скобок?
Например, мне нужно:
hello [quote="im sneaky"] world
стать:
hello world
Вот то, что я пытаюсь использовать, но это не добивается цели:
preg_replace("/[\[(.)\]]/", '', $str);
Я только что закончил с:
hello quote="im sneaky" world
[
и ]
- специальные символы в регулярном выражении. Они используются для перечисления символов совпадения. [a-z]
соответствует любой строчной букве между a
и z
. [03b]
соответствует «0», «3» или «b». Чтобы соответствовать символам [
и ]
, вы должны экранировать их с помощью предшествующего \
.
Ваш код в настоящее время говорит: «Замените любой символ из [] ().
пустой строкой» (для ясности переупорядочен из того порядка, в котором вы вводили их).
Жадное совпадение:
preg_replace('/\[.*\]/', '', $str); // Replace from one [ to the last ]
Жадное совпадение может соответствовать нескольким [s и] s. Это выражение берет пример [«скрытого»] текста [с более «скрытным»] здесь
и превращает его в пример здесь
.
Perl имеет синтаксис для нежадных совпадений (вы, скорее всего, не хотите быть жадными):
preg_replace('/\[.*?\]/', '', $str);
Нежадные совпадения пытаются поймать как можно меньше символов. Используя тот же пример: пример [«скрытого»] текста [с более «скрытным»] здесь
становится примером текста здесь
.
Только до первого следующего]:
preg_replace('/\[[^\]]*\]/', '', $str); // Find a [, look for non-] characters, and then a ]
Это более ясно, но труднее читать. Используя тот же пример текста, вы получите результат нежадного выражения.
Обратите внимание, что ни один из них не имеет прямого отношения к пробелам. Пробелы по обе стороны от [
и ]
останутся.
Также обратите внимание, что все они могут завершиться ошибкой из-за искаженного ввода. Несколько [
и ]
без совпадений могут привести к неожиданному результату.
Думаю, вам действительно нужны скобки для внешних скобок, поскольку это группа. квадратные скобки - это диапазон выражений. Не уверен, как ввести это в SO.
/(\\[.*\\])/