[PHP] Regexp, remplacer une chaine après X caractères

Résolu/Fermé
Quo - 21 oct. 2013 à 12:14
 Quo - 21 oct. 2013 à 13:35
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 :
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:

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
Salut Quo,

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
1
Merci beaucoup pour tes explications détaillés, c'est exactement ce que je cherche.
0
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
0
Je ne connaissais pas du tout substr_replace tient.

C'est moins pratique qu'une solution en regexp ceci dit puisqu'il faut que je test au préalable l'existence de la chaine a remplacer, mais ça fera l'affaire.

Merci bien, je met le sujet en résolu.
0