[PHP] Regexp, remplacer une chaine après X caractères
Résolu/Fermé
A voir également:
- [PHP] Regexp, remplacer une chaine après X caractères
- Caractères ascii - Guide
- Caractères spéciaux symboles clavier - Guide
- Remplacer disque dur par ssd - Guide
- Remplacer word - Guide
- Chaine tnt gratuite sur mobile - Guide
2 réponses
[Dal]
Messages postés
6174
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
2 février 2024
1 083
21 oct. 2013 à 13:21
21 oct. 2013 à 13:21
Salut Quo,
1.
Tu n'es pas loin :-), la regex correcte est :
Dans les crochets, le point est compris littéralement comme étant le caractère point. Ce n'est pas ce que tu cherches, puisque tu cherches "tous caractères". Les crochets sont donc inutiles. Le quantificateur est correct pour indiquer "40 ou plus".
Puisque tu cherches à partir du début de la chaîne, j'ai aussi ajouté
2.
cela dit, ceci :
donne :
Si ce que tu veux, c'est bien "remplacer une partie d'une chaine de caractère qui se trouve après au moins 40 caractère du début de la chaine", cela signifie que ce que tu veux, c'est :
Pour cela, il faudra que tu fasses des captures, comme suit :
Dal
1.
Tu n'es pas loin :-), la regex correcte est :
/^.{40,}Ancienne chaine/.
Dans les crochets, le point est compris littéralement comme étant le caractère point. Ce n'est pas ce que tu cherches, puisque tu cherches "tous caractères". Les crochets sont donc inutiles. Le quantificateur est correct pour indiquer "40 ou plus".
Puisque tu cherches à partir du début de la chaîne, j'ai aussi ajouté
^en début de regex.
2.
cela dit, ceci :
<?php
$chaine = "1234567890123456789012345678901234567890123Ancienne chaine patati, patata";
$nouvelle = preg_replace('/^.{40,}Ancienne chaine/', 'Nouvelle chaine', $chaine);
echo "<p>nouvelle = $nouvelle</p>";
?>
donne :
nouvelle = Nouvelle chaine patati, patata
Si ce que tu veux, c'est bien "remplacer une partie d'une chaine de caractère qui se trouve après au moins 40 caractère du début de la chaine", cela signifie que ce que tu veux, c'est :
nouvelle = 1234567890123456789012345678901234567890123Nouvelle chaine patati, patata
Pour cela, il faudra que tu fasses des captures, comme suit :
$nouvelle = preg_replace('/(^.{40,})(Ancienne chaine)(.*)/', "$1" . "Nouvelle chaine" . "$3", $chaine);
Dal
meuhlol
Messages postés
1896
Date d'inscription
mardi 24 juillet 2007
Statut
Membre
Dernière intervention
30 novembre 2021
672
21 oct. 2013 à 12:29
21 oct. 2013 à 12:29
Tiens, je crois que cela pourrait t'intéresser :)
https://forum.phpfrance.com/php-debutant/remplacer-chaine-caractere-une-position-donnee-t253024.html#p324297
https://forum.phpfrance.com/php-debutant/remplacer-chaine-caractere-une-position-donnee-t253024.html#p324297
21 oct. 2013 à 13:35