Вот мой код, но он меняет только первый символ строки
$string = 'Earrold Imperial Valdez';
$text = preg_replace('/(\b[a-z])/i','<span style="color:red;">\1</span>',$text);
echo $text;
Просто возьмите 2 символа, например
$text = preg_replace('/^([a-z]{2})/i','<span style="color:red;">\1</span>',$string);
//↑ ^^^ Quantifier: {2} Exactly 2 time
//| assert position at start of the string
Или, если вы хотите сделать это без регулярного выражения, вы можете использовать substr()
, например
$text = '<span style="color:red;">' . substr($string, 0, 2) . '</span>' . substr($string, 2);
Ошибка в вашем регулярном выражении. [az]
влияет только на один символ, потому что нет множителя. Чтобы изменить первые 2, вам нужно использовать квантификатор - {}
.
Изменение вашего RegExp на /\b[az]{2})/i
должно исправить его.