Как сделать, чтобы регулярка не действовала в квадратных скобках?

Есть регулярка, которая убирает лишние пробелы в строке.
$text = 'ljahd lj hsa     jaldjhjlas        udaodsa';
$text2 = preg_replace('/\s+/', ' ', $text);

Мне нужно, чтоб данная регулярка пропускала, всё, что находится в квадратных скобках.
фы    жовлофыовлдыф [         ] офщшзвы фвшзгщф     ыовль
  • Вопрос задан
  • 133 просмотра
Пригласить эксперта
Ответы на вопрос 2
ZXZs
@ZXZs
Люблю программирование и IT-бизнес в частности =)
В регулярках есть что-то вроде условий.
(?(?=regex)then|else)
ex.
/(?(?=[a-z])[^ite]|^$)/
пояснение:
Если [a-z], то [^ite] (выбрать из [a-z] все, кроме i, t и e), иначе ^$ (пустая строка)

Возможно, что это здесь применимо.
Ответ написан
@dodo512
preg_replace('/\s+|\[.*?\](*SKIP)(*F)/s', ' ', $text);


Ещё вариант.
preg_replace('/\G([^\s\[]*(\[.*?\])?)*+\K\s+/s', ' ', $text);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы