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 :: Подскажите с preg_replace

 PHP.SU

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


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

> Без описания
t3dev
Отправлено: 06 Апреля, 2018 - 18:05:13
Post Id


Новичок


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


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




Добрый день.
Имею вот такой код, чтобы вырезать ненужное. Подскажите, пожалуйста, какой должна быть переменная $pattern, чтобы еще и вырезать обрамляющие теги так чтобы сам текст остался <p></p>

PHP:
скопировать код в буфер обмена
  1. $string = "<p>Melanoma in situ <span class='reference' data-code='D03'>D03.-</span></p>";
  2. $pattern = "<span class=\'reference\'[^>]*?>.*?</span>";
  3. $replaceWith = '';
  4. echo preg_replace("'$pattern'si", "$replaceWith", $string);

(Отредактировано автором: 06 Апреля, 2018 - 18:18:19)

 
 Top
LIME
Отправлено: 06 Апреля, 2018 - 20:34:21
Post Id


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


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


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




 
 Top
Строитель Модератор
Отправлено: 06 Апреля, 2018 - 20:35:55
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


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




t3dev пишет:
какой должна быть переменная $pattern, чтобы еще и вырезать обрамляющие теги так чтобы сам текст остался <p></p>
Можно добавить альтернативу с проверкой тега <p> или </p>:
PHP:
скопировать код в буфер обмена
  1. $string = "<p>Melanoma in situ <span class='reference' data-code='D03'>D03.-</span></p>";
  2.  
  3. $pattern = '~<span[^>]*>.*?</span>|</?p>~';
  4.  
  5. echo preg_replace($pattern, '', $string);
Или в зависимости от задачи, можно сперва выбирать текст из параграфа, а потом удалять из него теги <span> с вложенным текстом:
PHP:
скопировать код в буфер обмена
  1.     '~<p[^>]*>(.*?)</p>~',
  2.     function ($match) {
  3.         return preg_replace('~<span[^>]*>.*?</span>~', '', $match[1]);
  4.     },
  5.     $string
  6. );
 
 Top
LIME
Отправлено: 06 Апреля, 2018 - 20:41:19
Post Id


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


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


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




Строитель а че так сложно?)
PHP:
скопировать код в буфер обмена
  1. $str = preg_replace('~<p[^>]*>(.*?)</p>~', '', $str);
  2. $str = preg_replace('~<span[^>]*>.*?</span>~', '', $str);
Строитель пишет:
сперва выбирать текст из параграфа, а потом удалять из него теги <span> с вложенным текстом
у тебя наоборот
 
 Top
Строитель Модератор
Отправлено: 06 Апреля, 2018 - 21:34:35
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


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




LIME, тут и одной preg_replace() достаточно (мой первый пример).
LIME пишет:
Строитель а че так сложно?)
На счёт preg_replace_callback() - в колбеке больше действий можно написать. Конечно, для такой задачи тут вообще strip_tags() нужно использовать.
 
 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