Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: regex для удаления html tag по его id
Форумы портала PHP.SU » » Вопросы новичков » regex для удаления html tag по его id

Страниц (1): [1]
 

1. skolozhabskiy - 14 Июня, 2012 - 22:08:33 - перейти к сообщению
добрый вечер,

у меня проблема с регулярным выражением.

я использую tpl. по ходу выполнения скрипта мне нужно скрывать куски кода.
мне нужно по коду удалить html tag (div или span или p и так далее) со специфическим идентификатором id или классом.

например, нужно удалить блок div с id="product_sort_wrap"

пробовал так:

PHP:
скопировать код в буфер обмена
  1.   $show_data = '
  2.                <div id="product_sort_wrap" style="display:block; text-align:center; width:100%;">
  3.                  <p id="product_sort">Сортировать по: бренду (<a href="?sort=brand&direction=ASC">возр</a> | <a href="?sort=brand&direction=DESC">убыв</a>),
  4.                                                     наименованию (<a href="?sort=name&direction=ASC">возр</a> | <a href="?sort=name&direction=DESC">убыв</a>),
  5.                                                             цене (<a href="?sort=fixedPrice&direction=ASC">возр</a> | <a href="?sort=fixedPrice&direction=DESC">убыв</a>),
  6.                                                         рейтингу (<a href="?sort=opinion&direction=ASC">возр</a> | <a href="?sort=opinion&direction=DESC">убыв</a>)
  7.                  </p>
  8.                </div>
  9.  
  10.  $pattern = "/<p[id='cat_product_sort']*><\\/p[id='cat_product_sort']*>/";
  11.  preg_replace($pattern, '', $show_data);    
  12.  echo $show_data;

к сожалению выражение :

PHP:
скопировать код в буфер обмена
  1. <div[id='product_sort_wrap]*><\\/div[id='product_sort_wrap']*>

не работает.

спасибо за помощь
2. Alho - 14 Июня, 2012 - 22:16:15 - перейти к сообщению
CODE (htmlphp):
скопировать код в буфер обмена
  1. <div id="product_sort_wrap"[\s\S]*?<\/div>


PS Регулярку я конечно составил, но вот сама реализация... Это не самач лучшая идея, подумайте еще.
3. skolozhabskiy - 14 Июня, 2012 - 22:19:31 - перейти к сообщению
так не работает:

PHP:
скопировать код в буфер обмена
  1. $pattern = '<div id="product_sort_wrap"[\s\S]*?<\/div>';
  2.   preg_replace($pattern, '', $show_data);                              
  3.   echo $show_data;


пишет ошибку:

Warning: preg_replace(): Unknown modifier '<' in ......\_testing2.php on line 34

что-то не так?

спасибо за ответ
(Добавление)
Alho

а какая лучшая, если нужно скрыть не используемые html тэги при выводе шаблона. нужна реализация без java и jquery. и что неверно в вашем регулярном выражении? спасибо
4. Alho - 14 Июня, 2012 - 22:36:28 - перейти к сообщению
Cтоит добавить разделители:
PHP:
скопировать код в буфер обмена
  1. $pattern = '/<div id="product_sort_wrap"[\s\S]*?<\/div>/';


Плюс внимательнее читаем о preg_replace - он не изменяет текущий массив, а возвращает новый.

PHP:
скопировать код в буфер обмена
  1. $show_data=preg_replace($pattern, '', $show_data);                              
  2.   echo $show_data;

(Добавление)
Лучше... Ну все завит от того, как у вас реализовано шаблонирование. Всегда лучше добавить блок для вывода, нежели шерстить весь шаблон, и удалять кусок.
5. skolozhabskiy - 14 Июня, 2012 - 22:43:24 - перейти к сообщению
спасибо за ответ, ошибок теперь нет, но кусок кода не удаляется при тестировании. что надо изменить? мне нужно скрыть весь блок div с id="product_sort_wrap" со всем его содержимым. спасибо
6. Alho - 14 Июня, 2012 - 22:49:52 - перейти к сообщению
Умвр, чяднт?
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $show_data='апеммммммммммммм<div id="product_sort_wrap" style="display:block; text-align:center; width:100%;">
  3.                 <p id="product_sort">Сортировать по: бренду (<a href="?sort=brand&direction=ASC">возр</a> | <a href="?sort=brand&direction=DESC">убыв</a>),
  4.                                                    наименованию (<a href="?sort=name&direction=ASC">возр</a> | <a href="?sort=name&direction=DESC">убыв</a>),
  5.                                                            цене (<a href="?sort=fixedPrice&direction=ASC">возр</a> | <a href="?sort=fixedPrice&direction=DESC">убыв</a>),
  6.                                                        рейтингу (<a href="?sort=opinion&direction=ASC">возр</a> | <a href="?sort=opinion&direction=DESC">убыв</a>)
  7.                 </p>
  8.               </div>еапппппппппппппппппппппппппппппппп';
  9. $pattern = '/<div id="product_sort_wrap"[\s\S]*?<\/div>/';
  10.   $a=preg_replace($pattern, '', $show_data);                              
  11.   echo $a;
  12. ?>
7. skolozhabskiy - 15 Июня, 2012 - 01:44:58 - перейти к сообщению
спасибо

 

Powered by ExBB FM 1.0 RC1