[PHP] Regexp, remplacer une chaine après X caractères
Résolu
Quo
-
Quo -
Quo -
Bonjour,
J'essaye de 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 . Mais je patine un peu car le regexp est loin d'être ma spécialité.
Voici le plus loin que je sois arrivé jusqu'à présent :
Merci de votre aide.
J'essaye de 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 . Mais je patine un peu car le regexp est loin d'être ma spécialité.
Voici le plus loin que je sois arrivé jusqu'à présent :
preg_replace('/[.]{40,}Ancienne chaine/', 'Nouvelle chaine', $chaine);Malheureusement ça ne marche pas (je ne serais pas la sinon) et aucune des variations que j'ai trouvé sur internet jusqu'à présent non plus.
Merci de votre aide.
A voir également:
- [PHP] Regexp, remplacer une chaine après X caractères
- Site x - Guide
- Sites X : Pornhub, YouPorn et Redtube sont de nouveau accessibles en France - Guide
- Remplacer disque dur par ssd - Guide
- Caractères ascii - Guide
- Caractères spéciaux - Guide
2 réponses
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
Quo
Merci beaucoup pour tes explications détaillés, c'est exactement ce que je cherche.
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