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 :: Версия для печати :: Вырезать парный тего
Форумы портала PHP.SU » PHP » Регулярные выражения » Вырезать парный тего

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

1. Yakud - 18 Ноября, 2010 - 16:25:01 - перейти к сообщению
Всем привет. У меня возник вопрос, как через регулярки вырезать вложенный тег?
Пример:
Имеется строка:
CODE (html):
скопировать код в буфер обмена
  1. <span><span>квад</span>рат</span>


Мне нужно вырезать вложенный тег, чтобы получилась строка:
CODE (html):
скопировать код в буфер обмена
  1. <span>квадрат</span>


Большая просьба помочь.. Уже долго-долго сижу и не могу составить регулярное выражение..
Заранее, спасибо!
2. OrmaJever - 18 Ноября, 2010 - 21:24:57 - перейти к сообщению
тег только span? и без параметров?
PHP:
скопировать код в буфер обмена
  1. $str = '<span><span>квад</span>рат</span>';
  2.  
  3. echo preg_replace('#<span><span>(.+?)</span>(.+?)</span>#i', '<span>\\1\\2</span>', $str);
3. JustUserR - 18 Ноября, 2010 - 22:42:44 - перейти к сообщению
Yakud Проведение операций по анализу и модификации структуры информации представляемойц в виде XML-файлов целесообразно осуществлять посредством соответствующих компонентов анализа объектной модели документа - которые в том числе включаются в ядро и библиотеку динамических расширений PHP в виде категорий функций - описание которых проведено здесь http://php.su/functions/?page=cat_xml
4. Yakud - 18 Ноября, 2010 - 23:57:06 - перейти к сообщению
OrmaJever
Это только для данного случая.. случаи бывают разные.
К примеру, у меня есть строка:
CODE (html):
скопировать код в буфер обмена
  1. <span><span>квад</span>рат</span> <span>Текст</span> <span><span>ку</span>бик</span>

Мой скрипт обрабатывает ее в такой вид:
CODE (html):
скопировать код в буфер обмена
  1. <span>квадрат Текст кубик</span>

А нужно:
CODE (html):
скопировать код в буфер обмена
  1. <span>квадрат</span> <span>Текст</span> <span>кубик</span>

Сам скрипт:
PHP:
скопировать код в буфер обмена
  1. while(preg_match("#(?:$open_span)(.*$open_span.*$close_span.*)+(?:$close_span)#i", $s, $arr)){
  2.           $s = str_replace($arr[1], preg_replace("#($open_span)|($close_span)#", "", $arr[1]), $s);
  3. }

, где
PHP:
скопировать код в буфер обмена
  1. $open_span = "<span>";
  2. $close_span = "</span>";


Единственный случай, когда скрипт сможет правильно обработать исходную строку, если она записана в таком виде:
PHP:
скопировать код в буфер обмена
  1. <span><span>квад</span>рат</span>
  2. <span>Текст</span>
  3. <span><span>ку</span>бик</span>

т.е. с переносом строки.

Добавлять перенос строки, после каждого тега, не предлагать, это бред.. Нужно как-то сделать правильно.

Когда строка записана через пробелы, скрипт берет начало "<span>" и сразу самый конец "</span>", возвращая, все что между ними.
Когда через перенос строки, то все иначе.. Скрипт перебирает построчно и все в порядке.

Заранее спасибо за ответ, очень жду!
5. OrmaJever - 19 Ноября, 2010 - 00:41:37 - перейти к сообщению
Yakud пишет:
Это только для данного случая.. случаи бывают разные.

Ну я и делал для приведёного примера.
Судя по тому чтовы привели дальше случаи бывают очень разные...
Могу посоветовать такой вариант
PHP:
скопировать код в буфер обмена
  1. $str = '<span><span>квад</span>рат</span> <span>Текст</span> <span><span>ку</span>бик</span>';
  2. $x = '<span>';
  3. $x .= strip_tags($str);
  4. $x .= '</span>';
  5. echo $x;

Но это снова для отдельных случаев. Если в тексте будутдругие html теги оно их тоже удалит.
6. Yakud - 19 Ноября, 2010 - 07:15:25 - перейти к сообщению
Не, этот способ не подойдет.. мне нужно удалять отдельные теги, при чем они все одинаковые. Для этого, я и вынес их в переменную.

 

Powered by ExBB FM 1.0 RC1