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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Поиск тега в тексте внутри другого тега

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Skeptik
Отправлено: 10 Октября, 2011 - 01:21:22
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




Есть текст, типа:

Цитата:
<span class="h4">
бла-бла-бла<br />
</span>&nbsp;<br />
<br />
<span class="h5">бла-бла-бла.<br />
&nbsp;<br />
бла-бла-бла<br />
</span>&nbsp;<br />
<br />
<span>бла-бла-бла.<br />
&nbsp;<br />
бла-бла-бла<br />
</span>&nbsp;<br />
<br />


Нужно все теги <br />, которые не вписаны внутрь тега span, заменить на <p></p>, при этом чтобы теги <br />, находящиеся внутри тега span, остались без изменений. Можно ли это реализовать через preg_replace? Помогите, плз, составить регулярное выражение.

(Отредактировано автором: 10 Октября, 2011 - 01:27:04)

 
 Top
LIME
Отправлено: 10 Октября, 2011 - 01:39:11
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




чета я думал думал как попроще
так и непридумал
может ктото умнее окажется
я вот что предлагаю
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $str='<br /><span class="h4">
  3. бла-бла-бла</span>&nbsp;<span class="h5">бла-бла-бла.&nbsp;бла-бла-бла</span>&nbsp;<span>бла-бла-бла.&nbsp;бла-бла-бла</span>&nbsp;<br />';
  4. echo preg_replace_callback('#(^.*<span)|(</span>.*<span)|(</span>.*$)#sU',create_function(
  5.               '$matches',
  6.               'return str_replace("<br />","<p></p>",$matches[0]);'
  7.           ),$str);
  8. ?>

(Добавление)
какая-то длинная регулярка получилась
и ведь не уменьшишь ))
подстрекаю
(Добавление)
я добавил в начало строки br
если его там точно быть не может хорошо бы убрать этот вариант из регулярки

(Отредактировано автором: 10 Октября, 2011 - 03:06:24)

 
 Top
LIME
Отправлено: 10 Октября, 2011 - 04:45:48
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




и с вложенными span могут быть проблемы хотя их наверное и быть не должно
 
 Top
Skeptik
Отправлено: 10 Октября, 2011 - 09:22:28
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




Спасибо за отклик! Улыбка
К сожалению, проблема в предложенном варианте - если встречается текст, где нет span вообще, то тег br не меняется. У меня была мысль, сделать в 2 прохода. Сначала:
Цитата:
$text = str_replace("<br />","<p></p>", $text);

А потом уже в получившемся сделать обратную замену внутри span - что-то вроде:
Цитата:
$text = preg_replace("регулярка внутри span", "<br />", $text);

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

(Отредактировано автором: 10 Октября, 2011 - 09:23:36)

 
 Top
LIME
Отправлено: 10 Октября, 2011 - 15:10:12
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Skeptik ну раз нет изящнее решения
сначала строку проверяешь на наличие "<span" строковой фцией strpos
если нет такого тупо все меняешь
если есть применяешь метод выше
 
 Top
Alek
Отправлено: 20 Октября, 2011 - 22:15:30
Post Id


Новичок


Покинул форум
Сообщений всего: 52
Дата рег-ции: Март 2011  
Откуда: Набережные Челны


Помог: 0 раз(а)




Skeptik пишет:


Нужно все теги <br />, которые не вписаны внутрь тега span, заменить на <p></p>, при этом чтобы теги <br />, находящиеся внутри тега span, остались без изменений. Можно ли это реализовать через preg_replace? Помогите, плз, составить регулярное выражение.



PHP:
скопировать код в буфер обмена
  1. $str='<span class="h4">
  2. бла-бла-бла</span>&nbsp;<span class="h5">бла-бла-бла.&nbsp;бла-бла-бла</span>&nbsp;<span>бла-бла-бла.&nbsp;бла-бла-бла</span>&nbsp;<br />';
  3. $s=preg_replace('/(<\/span>\s)(?><br\s?\/>\s+){1,2}/ei',"'\\1'.'<p></p>'", $str);

(Отредактировано автором: 20 Октября, 2011 - 22:20:16)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB