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

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

Мне нужно, чтоб данная регулярка пропускала, всё, что находится в квадратных скобках.
фы    жовлофыовлдыф [         ] офщшзвы фвшзгщф     ыовль
  • Вопрос задан
  • 113 просмотров
Пригласить эксперта
Ответы на вопрос 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);
Ответ написан
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы
TopHit.ru Москва
от 90 000 до 100 000 руб.
Интерно Ростов-на-Дону
от 35 000 до 50 000 руб.
Ticketland.ru Москва
от 120 000 руб.
22 янв. 2019, в 17:47
300 руб./за проект
22 янв. 2019, в 17:36
600 руб./за проект
22 янв. 2019, в 17:30
100 руб./за 1000 зн.