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

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

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

 

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

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

тема: Замена за исключением значений между тегами
 
 автор: rudoy24   (05.10.2015 в 18:20)   письмо автору
 
 

Здравствуйте.
Есть код который вставляет после найденых абзацов "<p>...</p>" слово "text".
-----------------------
$after_p = 'text';
$row->text = preg_replace('/<\/p>/', '</p>'. $after_p, $row->text, 5);

-----------------------
Необходимо исключить вставку слова "text" если в теле поиска будет обнаружена <table> или <blockquote> в которых будут находится теги абзацов.

К примеру тело поиска:
-----------------------
<p>...</p>
<p>...</p>
<table>
<tr>
<td><p>...</p></td>
<td><p>...</p></td>
</tr>
</table>
<p>...</p>
<blockquote><p>...</p></blockquote>
<p>...</p>

-----------------------

Что должно получится:
-----------------------
<p>...</p>text
<p>...</p>text
<table>
<tr>
<td><p>...</p></td>
<td><p>...</p></td>
</tr>
</table>
<p>...</p>text
<blockquote><p>...</p></blockquote>
<p>...</p>text

-----------------------
То есть в таблице и в цитатах после абзацов не добавлять слово "text". Приведенный код выше вставляет "text" и в таблице и в цитатах.

  Ответить  
 
 автор: rudoy24   (05.10.2015 в 18:28)   письмо автору
 
   для: rudoy24   (05.10.2015 в 18:20)
 

Следующим кодом возможно добиться исключения вставки слова "text" между тегами <table>, но как еще добится и того что бы не вставляло между тегами <blockquote>?
----------------------------
$xx='<p>...</p>
<p>...</p>
<table>
<tr>
<td><p>...</p></td>
<td><p>...</p></td>
</tr>
</table>
<p>...</p>';

$mask='<<<%s>>>';
$pl=array();

$yy=preg_replace_callback(
'~<table>.*?</table>~is',
function($m) use (&$pl,$mask){
$pl[]=$m[0];
return sprintf($mask,count($pl));
},
$xx
);

$tt=preg_replace('/<\/p>/', '</p>text', $yy);

$zz=preg_replace_callback(
'~'.sprintf(preg_quote($mask,'~'),'(.*?)').'~si',
function($m) use ($pl){
return $pl[$m[1]-1];
},
$tt
);
print_r($zz);
-------------------
---------

  Ответить  
Rambler's Top100
вверх

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