Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: preg_replace удаление определенного ТЭГа
 
 автор: SlaDER   (15.02.2008 в 12:17)   письмо автору
 
 

Привет всем! Как можно при помощи preg_replace удалить определенный ТЭГ например <p></p>

   
 
 автор: Faraon   (15.02.2008 в 12:42)   письмо автору
 
   для: SlaDER   (15.02.2008 в 12:17)
 

preg_replace("|</?p.*?>|i","",$text); 

   
 
 автор: SlaDER   (15.02.2008 в 12:51)   письмо автору
 
   для: Faraon   (15.02.2008 в 12:42)
 

Спасибо! А можно ли удалить только первые вхождения <p></p>

Например:
<p>Текст <p>текст</p> текст</p>

Удалит только <p></p>

   
 
 автор: exp   (15.02.2008 в 15:03)   письмо автору
 
   для: SlaDER   (15.02.2008 в 12:51)
 

можно наверное как-то так
<? 
$txt 
= <<<TXT
<p>Текст1 <p>текст2</p> текст3</p>
<p>Текст4 <p>текст5</p> текст6</p>
TXT;
echo 
$txt preg_replace('#<p[^>]*>((?:(?!</?P>).)*((<P[^>]*>(?:(?!</?P>).)*</p>(?:(?!</?P>).)*)*)?)</p>#s''$1'$txt1);
или что-то типа просто "#<p>.*?</p>#s"

////
проще и быстрее работает так:
<?
$txt 
preg_split('#(</?p[^>]*>)#'$txt, -1PREG_SPLIT_DELIM_CAPTURE);
$txt2 '';
$u $p 0;

for (
$i=0$i<count($txt); $i++)
{
    if (
$p 1)switch($txt[$i])
    {
        case 
'<p>':
            if (
$u$txt2 .= $txt[$i];
            
$u++;
        break;
        case 
'</p>':
            if (
$u == 1$p++;
            else 
$txt2 .= $txt[$i];
            
$u--;
        break;
        default:
            
$txt2 .= $txt[$i];
        break;
    }
    else 
$txt2 .= $txt[$i];
}
echo 
'<hr><pre>' htmlspecialchars($txt2) . '</pre>';

   
 
 автор: kasmanaft   (17.02.2008 в 16:17)   письмо автору
 
   для: SlaDER   (15.02.2008 в 12:51)
 

Еще вариант: $txt = preg_replace('#<p[^>]*>(((?R)|(?!</?p[>]*>).)*)</p>#s', '$1', $txt);
Не знаю, что быстрее будет...

PS немного по-другому работает.

   
 
 автор: SlaDER   (18.02.2008 в 11:11)   письмо автору
 
   для: kasmanaft   (17.02.2008 в 16:17)
 

Спасибо! Надо учить рег. выражения, чтобы людей не просить.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования