Сообщение от snovapavel
|
Почему?
|
Потому, что неверно. Ваш первый пост о тегах также базировался на ошибочном представлении, а ведь надо было использовать preg_match_all, и так:
preg_match_all('/<(div)[^>]*>.*<p[^>]*>.+<\/p>.*<\/div>|<(blockquote)[^>]*>.*<p[^>]*>.+<\/p>.*<\/blockquote>/sU', $string, $matches, PREG_SET_ORDER);
foreach($matches as $r) {
$r = current(array_diff(array_slice($r, 1), ['']));
echo 'Параграф вложен в тег ' .$r . '</br>';
}
А в данном случае замена стразу без всяких проверок if...else
$text = preg_replace(['/bab/i', '/(?<!b>)a(?!<\/b)/i'], ['b<b>a</b>b', '<i>a</i>'], $text);