Вам не нужно извлекать строку в тегах <code>
, заменять текст и присоединять что-либо обратно. Все это можно сделать, используя preg_replace_callback
:
<?php
$str = "Loreum Ipsum Dolor Sit Amet <code>Some HTML Code like <h1>Head</h1></code>. Loreum Ipsum <code>Some Code</code> Dolor Sit Amet.";
$str = preg_replace_callback(
'|(?s)(?<=<code>).*?(?=</code>)|',
function ($matches) {
return str_replace('<', '<', $matches[0]);
// to replace '>' also:
//return str_replace('>', '>', str_replace('<', '<',$matches[0]));
},
$str
);
echo $str;
Отпечатки:
Loreum Ipsum Dolor Sit Amet <code>Some HTML Code like <h1>Head</h1></code>. Loreum Ipsum <code>Some Code</code> Dolor Sit Amet.
См. Демонстрацию Regex
(s)
Устанавливает однострочный режим так, чтобы .
соответствовал символу новой строки. (?<=<code>)
Подтверждение о том, что предыдущие символы соответствуют <code>
. .*?
Не жадное совпадение, совпадающее с 0 или более символами до ... (?=
) Предварительное утверждение о том, что следующие символы соответствуют <code>
.
PHP Демо