-
str_replace avec regex
Bonjour,
Je cherche à remplacer 20020 par 2A020 ou 20021 par 2A021
En fait tout ce qui commence par 20 en début de chaine doit se transformer par 2A mais pas après les 2 premiers chiffres dans la chaine
Code:
$val = str_replace("20","2B",$val);
$val = 20333 donne bien 2A333
mais $val = 20020 donne 2A02A alors que je veux avoir 2A020
Une Regex ?
-
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:
Code:
$val = str_replace(" 20"," 2A", $val);
Sinon, pour parer à toute éventualité:
Code:
$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:
Code:
$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:
Code:
$val = preg_replace('~\A20~', '2A', $val);
ou encore utiliser la chaîne comme un tableau de caractères:
Code:
if ($val[0] === '2' && $val[1] === '0') $val[1] = 'A';
-
Merci pour tout ces détails, ça fonctionne