Вы должны заключить свой шаблон в двойные кавычки, чтобы сделать интерполяцию переменных.
$pattern = "/((?<!\b$PREFIX)$LETTER|$LETTER(?!$SUFFIX\b))/i";
И еще, вы определяете префикс $ (в нижнем регистре) и используете $ PREFIX (в верхнем регистре). Таким образом, сценарий становится следующим и прекрасно работает для меня:
<?php
$PREFIX = 'e';
$LETTER = 'n';
$SUFFIX = 'd';
$text = "<p>Newton, Einsteing and Edison. #end</p>";
$pattern = "/((?<!\b$PREFIX)$LETTER|$LETTER(?!$SUFFIX\b))/i";
echo preg_replace($pattern, "<b>$1</b>", $text),"\n";
?>
Выход:
<p><b>N</b>ewto<b>n</b>, Ei<b>n</b>stei<b>n</b>g a<b>n</b>d Ediso<b>n</b>. #end</p>
без форматирования кода:
N ewto n , Ei n stei n га n d Ediso n . # Конец