2010-10-30 6 views
0

J'ai des chaînes de texte qui peuvent avoir les formats suivants:Expression régulière - chiffres extrait

Was £ 39.95 Maintenant seulement 29,00
£ OU
était-0.95p maintenant 10p

Quelle est la meilleure façon pour extraire deux nombres de chaque chaîne, donc je peux les soustraire plus tard.

+2

Comment comptez-vous faire la différence £ 29 et 10p? L'un est 2900p, l'autre 10 –

Répondre

1

Cette monstruosité va capturer deux nombres séparés par du texte. Il capturera également les unités.

$match = preg_match("/((?:£)?(\d+(?:\.\d+)?)(?:p)?)[a-z\s]*((?:£)?(\d+(?:\.\d+)?)(?:p)?)/i", "Was £39.95 Now Only 99p"); 

print_r($matches); 

Cela donnera:

 
Array (
    [0] => Was £39.95 Now Only 99p 
    [1] => £39.95 
    [2] => 39.95 
    [3] => 99p 
    [4] => 99 
) 
1

Vous pouvez utiliser une expression régulière comme les suivantes:

/\d+(\.\d+)?/ 

Soyez prudent parce que ce ne sera pas lu les unités, de sorte que vous pouvez facilement vous retrouver avec une erreur s'il y a quelque chose comme ce qui suit:

 
Was £2 Now Only 99p 

Vous pouvez également faire attention aux virgules dans votre chaîne de texte. Notez qu'il existe également des problèmes d'internationalisation que vous devez connaître. De nombreux pays utilisent , comme séparateur décimal et . comme séparateur de milliers. Vous pourriez être en mesure de deviner les paramètres régionaux de la devise (par exemple, £ indique que le séparateur décimal est .).

Si vous pouvez être plus précis sur le type de valeurs que votre programme doit accepter, vous obtiendrez probablement de meilleures réponses.

Questions connexes