PHP заменяет все между фигурными скобками?

#php #preg-replace

#php #preg-replace

Вопрос:

Я отстой с preg, я никогда не научусь этому: ( Это не должно быть сложно, могу ли я, пожалуйста, привести пример кода, чтобы заменить все между фигурными скобками, включая пробелы, все? Нравится:

 $string = preg_replace('{.*?}#si', '', $string); 
  

или что-то еще?

Ответ №1:

Вам не хватало начального # разделителя:

 '#{.*?}#s'
  

Посмотрите, как это работает онлайн: ideone

Пара других второстепенных моментов:

  • i Модификатор здесь не нужен, поскольку в шаблоне нет букв.
  • Рекомендуется избегать { и } в регулярных выражениях, чтобы избежать путаницы с их использованием в качестве кванторов, хотя в данном случае это не является строго необходимым.

Комментарии:

1. спасибо за ответ, но все, что он сделал, это удалил первую скобку, и все, что было между скобками, осталось.

2. @John Jenkins: Как дикое предположение, я бы предположил, что вы забыли } , или у вас есть дополнительный пробел или другой символ непосредственно перед финалом # . Опубликуйте код, который вы пробовали, если вам нужна более конкретная помощь.

3. Я просто скопировал и вставил код, который вы мне дали. Сейчас я пытаюсь сделать что-то другое, пытаясь медленно модифицировать код для чего-то другого: $string = preg_replace(‘#([{.*?}])*?([{.*?}])# e’, «(‘t$2’)»,$string); Он добавляет табуляцию после каждой точки и вопросительного знака, хотя я бы хотел, чтобы он делал это для всего, что находится между всеми скобками.

4. @John Jenkins: Тогда, похоже, ваш ключ копирования вставки сломан, потому что, когда я скопировал вставил его, он работал нормально… Смотрите Обновление моего ответа: я добавил ссылку на ideone, которая показывает, что она работает правильно. Я предлагаю вам опубликовать точный код, который вы пробовали, иначе я могу только догадываться, что вы сделали не так…

5. $string = preg_replace(‘#{.*?}# s’, «», $string); работает для вас? Все, что он делает для меня, это удаляет первую скобку. В основном я пытаюсь сделать отступы внутри операторов if () { $blah = 1; } if, while и foreach .

Ответ №2:

После прочтения ваших других вопросов кажется, что вы хотите использовать это для украшения своего кода. В то время как многие редакторы имеют эту функциональность, встроенную в них для одного файла, я полагаю, вы хотите применить это к куче файлов. Если это так, см. https://github.com/clbustos/PHP_Beautifier .

Редактировать из-за комментариев: тогда вы не захотите использовать регулярные выражения, честно. Используйте php tokenizer.

Комментарии:

1. Я пытаюсь сделать свой собственный более красивый

2. @JohnJenkins: Попросив других людей написать это для вас за деньги?

3. Я предлагаю это совершенно бесплатно, без рекламы, в основном я буду использовать его сам