2017-03-01 5 views
1

Also, immer noch lernen, Regex ist Geist betäubend Zeug. Aber ich habe eine funktionierende Regex zu preg_match in PHP irgendwelche Zahlen basierend auf Produktpreise, die ein Währungssymbol £ folgen. Dies kann hilfreich sein, da ich kein funktionierendes Beispiel finden konnte, um alle Varianten (wie z. B. Tausend und Dezimalzahlen usw.) zu berücksichtigen. Jede Verbesserung der Regex ist absolut willkommen!Verwenden von Regex mit Produktpreis hinter Währungszeichen

Meine Frage ist, warum enthält das Array 3 Instanzen jeder Zahl? Und was bedeutet die folgende "2"?

(?<=\£|GBP)((\d{1,6}(,\d{3})*)|(\d+))(\.\d{2})? 

Funktion:

print_r Dumping:

[3] => Array 
    (
     [0] => Array 
      (
       [0] => 545 
       [1] => 2 
      ) 

     [1] => Array 
      (
       [0] => 545 
       [1] => 2 
      ) 

     [2] => Array 
      (
       [0] => 545 
       [1] => 2 
      ) 

    ) 
+0

Aber warum zum Teufel du nicht zeigen ein Beispiel String! –

+0

Hinzugefügt. Ich dachte nicht, dass es helfen würde. – Jquestions

+0

Sie haben nicht gut verstanden, was ich gefragt habe, mit anderen Worten: Können Sie Ihre XML-Datei zeigen? –

Antwort

1

Ihr aktuelles regex hat viele unnötige Gruppierung/Formatierung, die nicht benötigt wird.

(?<=£|GBP)[\d.,]+ 

siehe demo/explanation

PHP

(Implementierung)

<?php 
    $re = '/(?<=£|GBP)[\d.,]+/'; 
    $str = '£545 £5450 £54.20 £5450 £545,620 £545,620.96 
      GBP545 GBP5450 GBP54.20 GBP5450 GBP545,620 GBP545,620.96'; 
    preg_match_all($re, $str, $matches); 
    print_r($matches); 
?> 
: Die folgenden regex würde in Ihrem Fall geeignet sein

(Ausgang)

Array 
(
    [0] => Array 
     (
      [0] => 545 
      [1] => 5450 
      [2] => 54.20[3] => 5450 
      [4] => 545,620 
      [5] => 545,620.96 
      [6] => 545 
      [7] => 5450 
      [8] => 54.20 
      [9] => 5450 
      [10] => 545,620 
      [11] => 545,620.96 
     ) 
) 
Verwandte Themen