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

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

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

hello [quote="im sneaky"] world

стать:

hello world

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

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

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

hello quote="im sneaky" world
24
задан double-beep 13 May 2019 в 17:53
поделиться

2 ответа

[ и ] - специальные символы в регулярном выражении. Они используются для перечисления символов совпадения. [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 ]

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


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

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

34
ответ дан 28 November 2019 в 23:30
поделиться

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

/(\\[.*\\])/
1
ответ дан 28 November 2019 в 23:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: