Si par hasard tes nombres sont toujours précédés du même caractère comme par exemple un espace, tu peux éviter de passer par preg_replace en rusant un minimum:
$val = str_replace(" 20"," 2A", $val);
Sinon, pour parer à toute éventualité:
$val = preg_replace('~(?<![0-9])20~', '2A', $val);
où (?<![0-9]) est un test arrière négatif (negative lookbehind) qui teste que 20 n'est pas précédé d'un chiffre.
ou encore si tu sait que tes nombres ne sont ni précédés d'une lettre ni précédés d'un underscore, tu peux utiliser un word boundary \b qui marque la position entre un caractère appartenant à la classe \w (soit par défaut [a-zA-Z0-9_]) et un caractère n'y appartenant pas ou le début ou la fin de la chaîne:
$val = preg_replace('~\b20~', '2A', $val);
Si par début de chaîne tu entends vraiment le début de la chaîne, dans ce cas autant utiliser une ancre de début de chaîne directement:
$val = preg_replace('~\A20~', '2A', $val);
ou encore utiliser la chaîne comme un tableau de caractères:
if ($val[0] === '2' && $val[1] === '0') $val[1] = 'A';
Partager