Признаюсь, вашу регулярку так и не осилил.. Почему именно от 1 до 10 символов в начале и конце непонятно?
Набросал вот что, посмотрите..
$pattern = preg_quote("Nokia");
$value = '$1<a style="background-color: red; color: white;" href="http://ya.ru/">$2</a>$3';
$content = file_get_contents('http://hi-tech.mail.ru/review/Nokia_Lumia_630-rev.html', "r");
$exp = "/(<[^aA][^>]*?>[^<\"]*?[^\w])($pattern)([^\w][^>\"]*?<)/i";
$content = preg_replace($exp, $value, $content);
echo $content;
Вроде выполняет то, что нужно. Текст внутри непарных тегов не заменяет. Так же не заменяет внутри тега <а>, хоть он и парный. И не трогает текст внутри кавычек "".
оно?