|
|
|
| Здравствуйте.
Есть код который вставляет после найденых абзацов "<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: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);
-------------------
| --------- | |
|
|
|