Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> удаление значения между тегами 
:(
    Опции темы
derek
Дата 7.6.2009, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 16.7.2006

Репутация: нет
Всего: нет



Допустим на вход подается такой текст

"text1
text2
text3

<b>boldtext1</b>
<b>boldtext2</b>
<b>boldtext3</b>


text4
text5"

необходимо удалить весь текст с тегами <b> (и сами теги тоже). Я делаю так. Ищу текст между тегами - заменяю его в тексте на пустой, а потом удаляю сами теги.


Код


function get_between ($text, $s1, $s2) {
$mid_url = "";
$pos_s = strpos($text,$s1);
$pos_e = strpos($text,$s2);
for ( $i=$pos_s+strlen($s1) ; (( $i<($pos_e)) && $i <strlen($text)) ; $i++ ) {
$mid_url .= $text[$i];
}
return $mid_url;
}

for ($i=0;$i<=3;$i++)
    {

    $textintags=get_between($testhtmldata,"<b>","</b>");
    $indata=str_replace($textintags,"",$indata);

    }
    
$indata=str_replace("<b>","",$indata);
$indata=str_replace("</b>","",$indata);



но код работает некорректно - убирает только содержимое первого тега, т.е. в нашем случае только boldtext1. Теги убирает везде. в чем ошибка понять не могу.

может вообще есть способ по-проще?

спасибо


PM MAIL   Вверх
enof
Дата 7.6.2009, 23:18 (ссылка) |   (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 30
Всего: 35



Код

$str = preg_replace("#<b>.*</b>#Us", "", $str);


Это сообщение отредактировал(а) enof - 7.6.2009, 23:19
PM MAIL ICQ Skype   Вверх
derek
Дата 7.6.2009, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 16.7.2006

Репутация: нет
Всего: нет



вообще, понятно что надо использовать регулярки - одна строчка кода против 20
но просто здесь я немного абстрагировал свою задачу, в моем варианте фраза в тексте выглядит примерно так

{<span style=\"background-color: #c0c0c0;\">{ТЯЖ.ПОЛ}</span>}привет{<span style=\"background-color: #c0c0c0;\">{/ТЯЖ.ПОЛ}</span>}

реально ли написать регулярку к таким "тегам"?



ну и все же, что было нет так в моем коде изначально?



Это сообщение отредактировал(а) derek - 8.6.2009, 00:02
PM MAIL   Вверх
derek
Дата 9.6.2009, 02:27 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 16.7.2006

Репутация: нет
Всего: нет



что-то я мучаюсь и не выходит. вообще реально получится подогнать регулярку под такой формат "тегов"?


{<span style=\"background-color: #c0c0c0;\">{ТЯЖ.ПОЛ}</span>}привет{<span style=\"background-color: #c0c0c0;\">{/ТЯЖ.ПОЛ}</span>}
PM MAIL   Вверх
Sentox
Дата 9.6.2009, 07:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


как то так
**


Профиль
Группа: Участник
Сообщений: 392
Регистрация: 27.1.2009
Где: Зимбабве

Репутация: 7
Всего: 7




Код

$str = preg_replace("#<span.*</span>#Us", "", $str);

PM MAIL   Вверх
derek
Дата 10.6.2009, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 16.7.2006

Репутация: нет
Всего: нет



Sentox
"тег" в моем случае вот это это "{<span style=\"background-color: #c0c0c0;\">{ТЯЖ.ПОЛ}</span>}".
Просто для <span> регулярку не проблема написать, да.
PM MAIL   Вверх
derek
Дата 12.6.2009, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 16.7.2006

Репутация: нет
Всего: нет



ребят ну я что-то все никак не осилю  smile  smile 
 smile 
PM MAIL   Вверх
enof
Дата 12.6.2009, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 30
Всего: 35



\{<span.*</span>\}
PM MAIL ICQ Skype   Вверх
derek
Дата 12.6.2009, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 16.7.2006

Репутация: нет
Всего: нет



enof, спасибо!
но тут уже опять my bad.
я уже писал что это целый тег
"{<span style=\"background-color: #c0c0c0;\">{ТЯЖ.ПОЛ}</span>}".

может быть еще например такой тег
"{<span style=\"background-color: #c0c0c0;\">{ЛЕГ.ПОЛ}</span>}".

т.е. важно что находится между span'ов.

т.е. регулярка должна быть для всей строки, с чем у меня и возникает проблема
PM MAIL   Вверх
derek
Дата 13.6.2009, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 16.7.2006

Репутация: нет
Всего: нет



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

"
{<span style=\"background-color: #c0c0c0;\">{ТЯЖ.ПОЛ}</span>}hello{<span style=\"background-color: #c0c0c0;\">{/ТЯЖ.ПОЛ}</span>}

{<span style=\"background-color: #c0c0c0;\">{ЛЕГ.ПОЛ}</span>}world{<span style=\"background-color: #c0c0c0;\">{/ЛЕГ.ПОЛ}</span>}

"

нужно написать такие регулярки чтобы осталось

"
hello

world
"

заранее огромное спасибо!
PM MAIL   Вверх
enof
Дата 13.6.2009, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 30
Всего: 35



Не поверишь, но регулярка так и работает.
PM MAIL ICQ Skype   Вверх
derek
Дата 13.6.2009, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 16.7.2006

Репутация: нет
Всего: нет



enof, ок, а что делать если из такой входной строки
"
{<span style=\"background-color: #c0c0c0;\">{ТЯЖ.ПОЛ}</span>}hello{<span style=\"background-color: #c0c0c0;\">{/ТЯЖ.ПОЛ}</span>}

{<span style=\"background-color: #c0c0c0;\">{ЛЕГ.ПОЛ}</span>}world{<span style=\"background-color: #c0c0c0;\">{/ЛЕГ.ПОЛ}</span>}

"

нужно получить такую?

"
hello

{<span style=\"background-color: #c0c0c0;\">{ЛЕГ.ПОЛ}</span>}world{<span style=\"background-color: #c0c0c0;\">{/ЛЕГ.ПОЛ}</span>}

"

одной единственной универсальой регуляркой в таком случае не справишься

PM MAIL   Вверх
enof
Дата 13.6.2009, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 30
Всего: 35



А словами описать, что нужно, никак? Или по-вашему легко догадаться по этому:

Цитата(derek @  13.6.2009,  19:51 Найти цитируемый пост)
"
{<span style=\"background-color: #c0c0c0;\">{ТЯЖ.ПОЛ}</span>}hello{<span style=\"background-color: #c0c0c0;\">{/ТЯЖ.ПОЛ}</span>}

{<span style=\"background-color: #c0c0c0;\">{ЛЕГ.ПОЛ}</span>}world{<span style=\"background-color: #c0c0c0;\">{/ЛЕГ.ПОЛ}</span>}

"

нужно получить такую?

"
hello

{<span style=\"background-color: #c0c0c0;\">{ЛЕГ.ПОЛ}</span>}world{<span style=\"background-color: #c0c0c0;\">{/ЛЕГ.ПОЛ}</span>}

?
PM MAIL ICQ Skype   Вверх
derek
Дата 13.6.2009, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 16.7.2006

Репутация: нет
Всего: нет



enof
ну я и пытаюсь несколько постов сказать что регулярка должна полностью соответствовать "тегу". Тегов может быть несколько, причем не обязательно нужно убирать все сразу - для каждого отдельного тега должна быть своя регулярка

еще раз, есть такая входная строка (теги выделены жирным)

"
{<span style=\"background-color: #c0c0c0;\">{ТЯЖ.ПОЛ}</span>}hello{<span style=\"background-color: #c0c0c0;\">{/ТЯЖ.ПОЛ}</span>}

{<span style=\"background-color: #c0c0c0;\">{ЛЕГ.ПОЛ}</span>}world{<span style=\"background-color: #c0c0c0;\">{/ЛЕГ.ПОЛ}</span>}

"
необходимо написать регулярку для удаления тегов вокруг слова hello
чтобы в результате получилась строка

"
hello

{<span style=\"background-color: #c0c0c0;\">{ЛЕГ.ПОЛ}</span>}world{<span style=\"background-color: #c0c0c0;\">{/ЛЕГ.ПОЛ}</span>}

"

PM MAIL   Вверх
derek
Дата 13.6.2009, 23:16 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 16.7.2006

Репутация: нет
Всего: нет



пробую так

Код

$teststring=preg_replace("\{<span style\=\"background\-color\: \#c0c0c0\;\">\{ТЯЖ\.ПОЛ\}<\/span>\}.*\{<span style\=\"background\-color\: \#c0c0c0\;\">\{\/ТЯЖ\.ПОЛ\}<\/span>\}","",$teststring);


вываливается с ошибкой
Delimiter must not be alphanumeric or backslash

Добавлено через 9 минут и 46 секунд
разобрался, необходимо было заключить регулярку в слеши.
спасибо всем за помощь!

Это сообщение отредактировал(а) derek - 13.6.2009, 23:17
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1164 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.