Problème de regex

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics


Leonick
WRInaute accro
WRInaute accro
 
Messages: 12314
Inscription: Dim Aoû 08, 2004 20:24

Problème de regex

Message le Ven Nov 17, 2006 18:49

Voilà, j'ai un texte
Code: Tout sélectionner
Montant TTC <b>46&nbsp;800</b> pour <b>la facture</b>.
dans lequel j'aimerais récupérer le montant. Mais des fois, au lieu de Montant TTC il est inscrit "Total"
J'ai fait un preg_match avec cette expression
Code: Tout sélectionner
#[\b(Montant TTC|Total)\b]\s<b>([^<]*)</b>#
et le problème, c'est qu'il devrait me sortir
Code: Tout sélectionner
Montant TTC <b>46&nbsp;800</b>
alors que j'obtiens
Code: Tout sélectionner
* [0]=>C <b>46&nbsp;800</b>
* [1]=>46&nbsp;800
En fait, il semble considérer Montant TTC comme au choix n'importe laquelle des lettres :cry:
Comment faudrait-il faire le masque ?
Merci

oxman
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 118
Inscription: Lun Juin 21, 2004 1:52

Message le Ven Nov 17, 2006 19:05

#([0-9]+)</b> pour <b>la facture</b>#


Leonick
WRInaute accro
WRInaute accro
 
Messages: 12314
Inscription: Dim Aoû 08, 2004 20:24

Message le Ven Nov 17, 2006 19:11

oui, mais je n'ai pas toujours cette fin.
La seule chose semi-constante est Montant TTC ou Total avant et la valeur entre les balises <b>, mais comme il y a &nbsp; comme séparateur des milliers, plus des fois une valeur avec une virgule, en fait je voudrais pouvoir capturer tout ce qui est entre les balises <b> juste après le Montant TTC ou Total.
C'est pour cela que j'avais laissé la 2° balise <b> pour montrer que je ne pouvais pas toutes les capturer. :cry:

oxman
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 118
Inscription: Lun Juin 21, 2004 1:52

Message le Ven Nov 17, 2006 19:22

#[\b(Montant TTC|Total)\b]\s<b>([^<]+)?([0-9]+)</b>#


Leonick
WRInaute accro
WRInaute accro
 
Messages: 12314
Inscription: Dim Aoû 08, 2004 20:24

Message le Ven Nov 17, 2006 19:39

Non, il me sort toujours
Code: Tout sélectionner
* [0]=>C <b>46&nbsp;800</b>
* [1]=>46&nbsp;800
au lieu de
Code: Tout sélectionner
* [0]=>Montant TTC <b>46&nbsp;800</b>
* [1]=>46&nbsp;800

oxman
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 118
Inscription: Lun Juin 21, 2004 1:52

Message le Ven Nov 17, 2006 21:27

Vérifie dans [2]


Leonick
WRInaute accro
WRInaute accro
 
Messages: 12314
Inscription: Dim Aoû 08, 2004 20:24

Message le Ven Nov 17, 2006 21:42

Je n'avais pas fait attention, c'est encore pire :cry:
Code: Tout sélectionner
Array ( [0] => Array ( [0] => C 46 800  [1] => 46 80 [2] => 0 ) )
il me coupe carrément la valeur. Mais je n'arrive toujours pas à récupérer le masque en entier

oxman
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 118
Inscription: Lun Juin 21, 2004 1:52

Message le Ven Nov 17, 2006 21:49

#[(Montant TTC|Total)] <b>([^<]+)?;([0-9]+)</b>#


Leonick
WRInaute accro
WRInaute accro
 
Messages: 12314
Inscription: Dim Aoû 08, 2004 20:24

Message le Ven Nov 17, 2006 22:33

pas mieux
Code: Tout sélectionner
( [0] => Array ( [0] => C 46 800  [1] => 46  [2] => 800 ) )
Au début, j'avais commencé comme cela, à la manière de eregi() mais je n'ai jamais réussi à obtenir le masque entière :cry:

oxman
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 118
Inscription: Lun Juin 21, 2004 1:52

Message le Sam Nov 18, 2006 0:04

Pas mieux ?
Dans [2] tu as le montant et c'est ce que tu veux.


Leonick
WRInaute accro
WRInaute accro
 
Messages: 12314
Inscription: Dim Aoû 08, 2004 20:24

Message le Sam Nov 18, 2006 0:11

En fait, je voulais le masque complet, pour ne pas être obligé de refaire un appel pour savoir si c'était montant TTC ou total et aussi le prix. Donc le prix on arrive à l'avoir, mais la capture pourrait s'appliquer sur d'autres endroits dans le texte à lire, partout où le <b> serait précédé d'un espace et de n'importe quel caractère du masque, donc soit "M" soit "o", soit "n", etc... au lieu du mot en totalité :cry:

oxman
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 118
Inscription: Lun Juin 21, 2004 1:52

Message le Sam Nov 18, 2006 0:52

#((Montant TTC)|(Total)) <b>([^<]+)?;([0-9]+)</b>#

Il faut être précis quand on pose une question.
Bonne soirée/nuit.


Leonick
WRInaute accro
WRInaute accro
 
Messages: 12314
Inscription: Dim Aoû 08, 2004 20:24

Message le Sam Nov 18, 2006 12:31

Ca marche.
Merci
Je suis nul de ne pas avoir trouvé ça :oops:
En fait, dans les motifs de capture on peut mettre des mots complets, mais pas dans les autres motifs ?
oxman a écrit:Bonne soirée/nuit.
J'y étais déjà à cette heure

oxman
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 118
Inscription: Lun Juin 21, 2004 1:52

Message le Sam Nov 18, 2006 13:19

Tu mets ce que tu veux, j'aurais pu très bien mettre (^Montant TTC)


Leonick
WRInaute accro
WRInaute accro
 
Messages: 12314
Inscription: Dim Aoû 08, 2004 20:24

Message le Sam Nov 18, 2006 13:23

mais dans les motifs non capturants, si on mets
Code: Tout sélectionner
[Montant TTC]
il considère que cela peut être n'importe quelle lettre comprise dans les crochets, même si elle est seule

Problème de regex

Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités