Problème de regex

WRInaute accro
Voilà, j'ai un texte
Code:
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:
#[\b(Montant TTC|Total)\b]\s<b>([^<]*)</b>#
et le problème, c'est qu'il devrait me sortir
Code:
Montant TTC <b>46&nbsp;800</b>
alors que j'obtiens
Code:
* [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
 
WRInaute accro
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:
 
WRInaute accro
Non, il me sort toujours
Code:
* [0]=>C <b>46&nbsp;800</b>
* [1]=>46&nbsp;800
au lieu de
Code:
* [0]=>Montant TTC <b>46&nbsp;800</b>
* [1]=>46&nbsp;800
 
WRInaute accro
Je n'avais pas fait attention, c'est encore pire :cry:
Code:
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
 
WRInaute accro
pas mieux
Code:
( [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:
 
WRInaute accro
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:
 
WRInaute discret
#((Montant TTC)|(Total)) <b>([^<]+)?;([0-9]+)</b>#

Il faut être précis quand on pose une question.
Bonne soirée/nuit.
 
WRInaute accro
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 dit:
Bonne soirée/nuit.
J'y étais déjà à cette heure
 
WRInaute accro
mais dans les motifs non capturants, si on mets
Code:
[Montant TTC]
il considère que cela peut être n'importe quelle lettre comprise dans les crochets, même si elle est seule
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut