Reg exp : je sux

31 réponses
AuteurMessage

ddpetit
Modérateur

Photo de ddpetit

Inscrit le : 03/05/2006

# Le 22/11/2008 à 19:27

Malheureusement ça ne change rien, normalement ce cas est géré par le # ... #i. Merci quand meme de ton aide

Loccasion.com - Vente de voitures d'occasionOuvrir dans une nouvelle fenetre - Mandataire AutoOuvrir dans une nouvelle fenetre

Bool
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 22/11/2008 à 19:28

Ceci fonctionnera un peu mieux (si tous les mots font au moins 4 lettres) :

$string = preg_replace('#([a-z0-9]{2})\.([a-z0-9]{2})#i', '$1 $2', $preg);


Idéalement il faudrait indiquer que la seconde expression (voir la première) ne "consomme" pas de caractères ; mais je ne me souviens jamais d'une fois à l'autre comment on fait ça

Google is watching you.

tonguide
Modérateur

 

Inscrit le : 09/05/2005

# Le 22/11/2008 à 19:34

AH oui ddpetit, t'as raison.

Par contre Bool, qu'est ce que tu veux dire par "ne consomme pas" .. ?
Parce que là, si tu retires les 2 virgules, ça fait strictement 2 caractères.

Fred
Modérateur

Photo de Fred

Inscrit le : 09/05/2005

# Le 22/11/2008 à 19:36

tonguide a dit :
[a-z0-9] remplace par [a-zA-Z0-9]


Avec l'option i, pas la peine a priori.
Par contre je comprends pas trop ta regex, pourquoi tu mets des 0-9 dans tes caractères autorisés alors que justement tu ne veux pas virer les points qui sont entourés de chiffres ? (si j'ai bien compris ton problème en tous cas)

Moi je ferais plutôt ça :

#([^0-9])\.([^0-9])#


De façon à ce que chaque caractère "." qui n'est pas entouré de chiffres soit remplacé par un espace.

"Le bois ne rend pas les coups"

Bool
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 22/11/2008 à 19:49

tonguide : le problème c'est que le "curseur" du parseur se déplace au fur et à mesure, ça donne :

1) début du traitement :

{CURSEUR}Gd.Espace.III.ABS Evo 2.2 dCi115 Expression

2) premier remplacement :
Gd Espace{CURSEUR}.III.ABS Evo 2.2 dCi115 Expression

3) le premier point ne peut donc pas correspondre au masque, il passe directement au second :
Gd Espace.III ABS{CURSEUR} Evo 2.2 dCi115 Expression



En limitant à deux caractères comme j'ai fait, on limite la casse, l'étape 2 devenant :
Gd Es{CURSEUR}pace.III.ABS Evo 2.2 dCi115 Expression

puis :
Gd Espace II{CURSEUR}I.ABS Evo 2.2 dCi115 Expression

mais là ça coince à nouveau et on obtient au final :
Gd Espace III.ABS Evo 2.2 dCi115 Expression



Il faudrait donc lui indiquer de ne pas "déplacer le curseur" pour la deuxième partie de la chaine. Certaines assertions simples telles que "\b" le permettent, mais pour le cas présent je ne sais pas comment le spécifier.


Sinon je plussois l'approche de Fred, qui me semble beaucoup plus simple.

Google is watching you.

ddpetit
Modérateur

Photo de ddpetit

Inscrit le : 03/05/2006

# Le 22/11/2008 à 19:50

En fait dans certains cas, je peux avoir des chiffres (ex: "207.CC 1.6 HDi110 Sport FAP"), ce qui est sur c'est dans le cas où j'ai x.x il faut laisser le point. Et c'est vrai que c'est assez compliqué également.

Loccasion.com - Vente de voitures d'occasionOuvrir dans une nouvelle fenetre - Mandataire AutoOuvrir dans une nouvelle fenetre

petitnuage
Membre

Photo de petitnuage

Inscrit le : 20/11/2008

# Le 25/11/2008 à 18:52

L'expression rationnelle serait donc celle-ci :


$r=preg_replace('#(?<!\b.)(\.)(?!.\b)#', ' ', $source);

pour supprimer le point partout, sauf si on a un caractère de chaque côté du point.

Documentation à relire :

Lookahead and Lookbehind Zero-Width AssertionsOuvrir dans une nouvelle fenetre

Outil pour tester :

Regular Expression Test ToolOuvrir dans une nouvelle fenetre

Alors, heureux ? :-D

Petit Nuage est une société de services webOuvrir dans une nouvelle fenetre dirigée par Martin KorolczukOuvrir dans une nouvelle fenetre , apprenti webmasterOuvrir dans une nouvelle fenetre .

Rano
Modérateur

Photo de Rano

Inscrit le : 13/04/2005

# Le 25/11/2008 à 19:06

petitnuage a dit :
pour supprimer le point partout, sauf si on a un caractère de chaque côté du point.
...
Alors, heureux ? :-D


Ce n'est pas ce qui était demandé

Chambres d'hote tavelOuvrir dans une nouvelle fenetre
Séjours en provenceOuvrir dans une nouvelle fenetre
Forum mariageOuvrir dans une nouvelle fenetre

petitnuage
Membre

Photo de petitnuage

Inscrit le : 20/11/2008

# Le 26/11/2008 à 00:02

Rano a dit :
petitnuage a dit :
pour supprimer le point partout, sauf si on a un caractère de chaque côté du point.
...
Alors, heureux ? :-D


Ce n'est pas ce qui était demandé


Ah bon ? Voici le cahier des charges :

ddpetit a dit :
Je me permets de relancer ce topic, j'ai un souci actuellement pour l'enregistrement de certaines données sur mon site. Certaines personnes placent dans leur logiciel des "." entre chaque mot de modèle. Exemple :
Gd.Espace.III.ABS Evo 2.2 dCi115 Expression
. Le problème est que j'aimerais enlever ces points sauf s'il de quelque chose du genre "x.x". En gros j'aimerais arriver à
Gd Espace III ABS Evo 2.2 dCi115 Expression
.

Voici ma requête :
$string = preg_replace('#([a-z0-9]{2,})\.([a-z0-9]{2,})#i', '$1 $2', $preg);


Résultat généré :
Gd Espace.III ABS Evo 2.2 dCi115 Expression


Il doit me manquer un tout petit quelque chose ...


Or, avec le code fourni ci-dessus, j'atteints le résultat attendu et je corresponds au cahier des charges. Où est mon erreur ?

Petit Nuage est une société de services webOuvrir dans une nouvelle fenetre dirigée par Martin KorolczukOuvrir dans une nouvelle fenetre , apprenti webmasterOuvrir dans une nouvelle fenetre .

Rano
Modérateur

Photo de Rano

Inscrit le : 13/04/2005

# Le 26/11/2008 à 00:08

Oui, c'est bon, c'est juste "caractère". Mais j'étais pas spécialement bien luné

Chambres d'hote tavelOuvrir dans une nouvelle fenetre
Séjours en provenceOuvrir dans une nouvelle fenetre
Forum mariageOuvrir dans une nouvelle fenetre

Julgates
Administrateur

Photo de Julgates

Inscrit le : 09/03/2005

# Le 26/11/2008 à 00:24

Rano a dit :
Oui, c'est bon, c'est juste "caractère". Mais j'étais pas spécialement bien luné

Ca c'était pas bien vu je te rassure

Pauvre martin ;-)

Beyoung InteractiveOuvrir dans une nouvelle fenetre - Consultant web

petitnuage
Membre

Photo de petitnuage

Inscrit le : 20/11/2008

# Le 26/11/2008 à 00:31

Pffff...

Petit Nuage est une société de services webOuvrir dans une nouvelle fenetre dirigée par Martin KorolczukOuvrir dans une nouvelle fenetre , apprenti webmasterOuvrir dans une nouvelle fenetre .

Répondre

Vous ne pouvez pas participer au forum, car votre inscription n'a pas été validée. Pour vous faire valider en tant que Membre, cliquez ici.