2014-02-14 9 views
1

Я нашел много примеров в Интернете, но до сих пор не могу найти решение для этого. У меня есть страница PHP, которая нуждается в анализе страницы HTML + JS и должна удалить все, что включено между {}, а также сами скобки. Дело в том, что содержимое скобок должно быть [A-Za-z0-9_], а не что-либо еще (как я сделал до сих пор).Удалить фигурные скобки из строки

Это мой текущий заменить:

$this->content = preg_replace("/\{((?:[^{}]++|\{(?1)\})++)\}/", "", $this->content); 

До сих пор в настоящее время это работает довольно хорошо, дело в том, что не будет искать правых содержание между кронштейнами и не удаляет их, независимо от того, что внутри (атм это удаление JS функции из содержимого страницы, которая анализирует).

Что мне нужно изменить, чтобы добавить такое ограничение символов в содержимое reg-ex?

Благодаря

+0

Можете ли вы объяснить, что е xactly ваша текущая версия делает/как она работает? – Jon

+0

Спасибо вам всем, ребята. Это решило проблему: $ this-> content = preg_replace ("/ \ {[a-zA-Z0-9 _] +? \} /", "", $ This-> content); –

ответ

3

Попробуйте использовать этот шаблон:

\{[a-zA-Z0-9_]+?\} 

Лучше использовать ленивые квантификации с ? знака в конце числа повторений.

+0

@JohannesH. Спасибо, я знаю о жадности. Однако класс символов никогда не будет соответствовать закрывающей скобке '}'. –

+0

Как предложенный @Marius, он удаляет все содержимое страницы, но HTML-комментарии. $ this-> content = preg_replace ("\ {[a-zA-Z0-9 _] +? \}", "", $ this-> content); –

+0

@MariusSchulz Да, см. Комментарий к вашему ответу. Было бы быстро на это;) –

1

Узор, чтобы соответствовать этим фигурных скобок подстроки довольно прост:

\{[a-zA-Z0-9_]+\} 

Он сбегает { и }, которые в противном случае могут рассматриваться как части квантором (как, например, {3}). Обратите внимание, что в зависимости от языка программирования вам может потребоваться удвоить скобки (\\{[a-zA-Z0-9_]+\\}), чтобы избежать обратных косых черт.

+0

Я уже пробовал это: $ this-> content = preg_replace ("\ {[a-zA-Z0-9 _] + \}", "", $ this-> content); И он удалил все содержимое страницы, но комментарии HTML .. –

+2

ALmost. Сделайте это самое внутреннее выражение неживым, иначе оно удалит что-нибудь между первым '{' и last '}'. –

+0

@JohannesH. Нет, не будет. Я не использовал '. *', А '[a-zA-Z0-9_]' не будет использовать '}'. –

1

A-Za-z0-9_ может быть представлено как \w в регулярном выражении.

Так что, если ваши кронштейны необходимо содержать, по крайней мере, символ внутри, то регулярное выражение будет

\{\w+\} 

Если вы думаете, что может быть пустым, например {}, то вы можете использовать

\{\w*\} 

Если вы хотите, чтобы пространство, а также, то это будет

\{[\w\s]+\} 
Смежные вопросы