|
|
|
| Привет всем! Как можно при помощи preg_replace удалить определенный ТЭГ например <p></p> | |
|
|
|
|
|
|
|
для: SlaDER
(15.02.2008 в 12:17)
| |
preg_replace("|</?p.*?>|i","",$text);
|
| |
|
|
|
|
|
|
|
для: Faraon
(15.02.2008 в 12:42)
| | Спасибо! А можно ли удалить только первые вхождения <p></p>
Например:
<p>Текст <p>текст</p> текст</p>
Удалит только <p></p> | |
|
|
|
|
|
|
|
для: 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', $txt, 1);
| или что-то типа просто "#<p>.*?</p>#s"
////
проще и быстрее работает так:
<?
$txt = preg_split('#(</?p[^>]*>)#', $txt, -1, PREG_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>';
|
| |
|
|
|
|
|
|
|
для: SlaDER
(15.02.2008 в 12:51)
| | Еще вариант: $txt = preg_replace('#<p[^>]*>(((?R)|(?!</?p[>]*>).)*)</p>#s', '$1', $txt);
Не знаю, что быстрее будет...
PS немного по-другому работает. | |
|
|
|
|
|
|
|
для: kasmanaft
(17.02.2008 в 16:17)
| | Спасибо! Надо учить рег. выражения, чтобы людей не просить. | |
|
|
|