Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/11/2006, 03h10   #1
Membre éprouvé
 
Avatar de IP-Fix
 
Inscription : mars 2006
Messages : 406
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mars 2006
Messages : 406
Points : 433
Points : 433
Envoyer un message via MSN à IP-Fix
Par défaut preg_replace chaine interdite

Bonjour j'ai eu un tit probleme se soir , bien que contourné à présent, voici le probleme :

j'ai une chaine qui ressemble à sa : $str='aTbaTbaTb'; ou a , T et b son des string.

je veux remplacer aTb par "" si T="No Import !"

donc l'expression reguliere qui viens à l'esprit :

Code :
preg_replace("#^a(.*)No Import !(.*)b$#","",$str)
mais sa ne marche pas , car il prend le dernier b et du coup meme si le second T='ersrs' il serat tout de meme supprimer car il prend le premier a et le dernier b de la chaine 'aTbaTbaTb';

donc je pensais à ça :

Code :
preg_replace("#^a(.*)(^(a))(.*)No Import !(.*)(^(a))(.*)b$#","",$str)
mais j'ai du me planter quelques part car s'il ne supprime pas tout , il ne supprime rien ...

Pour contourner le probleme j'ai explode ma chaine à a , et ensuite sur chacun j'ai fait ma tite recette mais c'est pas super sexy , si quelqu'un à mieux à me proposer je suis preneur.
IP-Fix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2006, 10h46   #2
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
C'est pas très clair tout ça ! Cependant, le problème que vous rencontrez est certainement lié au fait que les expressions régulières sont gourmandes par défaut donc l'option U vous sera certainement utile :
Code :
echo preg_replace("#^a(.*)No Import !(.*)b$#U", '', $str);
La deuxième ne fonctionne pas déjà à cause du ^ qui me paraît mal employée : sa signification est un début de chaîne ou ligne (sans l'option m) ou alors une négation de classe (une classe est un ensemble de caractères exemple : [^0-9], pour un caractère qui n'est pas un chiffre).


Julp.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h31.


 
 
 
 
Partenaires

Hébergement Web