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

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

1. t3dev - 06 Апреля, 2018 - 18:05:13 - перейти к сообщению
Добрый день.
Имею вот такой код, чтобы вырезать ненужное. Подскажите, пожалуйста, какой должна быть переменная $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);
2. LIME - 06 Апреля, 2018 - 20:34:21 - перейти к сообщению
3. Строитель - 06 Апреля, 2018 - 20:35:55 - перейти к сообщению
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. );
4. LIME - 06 Апреля, 2018 - 20:41:19 - перейти к сообщению
Строитель а че так сложно?)
PHP:
скопировать код в буфер обмена
  1. $str = preg_replace('~<p[^>]*>(.*?)</p>~', '', $str);
  2. $str = preg_replace('~<span[^>]*>.*?</span>~', '', $str);
Строитель пишет:
сперва выбирать текст из параграфа, а потом удалять из него теги <span> с вложенным текстом
у тебя наоборот
5. Строитель - 06 Апреля, 2018 - 21:34:35 - перейти к сообщению
LIME, тут и одной preg_replace() достаточно (мой первый пример).
LIME пишет:
Строитель а че так сложно?)
На счёт preg_replace_callback() - в колбеке больше действий можно написать. Конечно, для такой задачи тут вообще strip_tags() нужно использовать.

 

Powered by ExBB FM 1.0 RC1