2016-03-19 12 views
0

Ich bekomme Daten über einen Webdienst, den ich analysieren muss, um einen Wert zu finden (Sonnenscheindauer) und das in php. Meine Idee wäre, es mit Regex zu tun.php regex extrahieren Muster, aber nur die Zahl darin

Ich kann bereits das gewünschte Muster sunshine: 7.5 h finden, aber ich brauche nur die 7.2 (als eine Zahl tatsächlich) aus der gefundenen Übereinstimmung. Was wäre der einfachste Weg, dies in PHP zu tun?

Kann ich es in einem pre_match, oder muss ich zu 2 x pre_match (zweite auf dem Spiel des ersten)?

Mein Code:

//test data 
$testInputs = array (
    0 => "blabla sunshine: 7 h blabla", 
    1 => "blabla sunshine: 7.5 h blabla", 
    2 => "blabla sunshine: 0.5 h blabla" 
    ); 
//pattern 
$pattern = '/sunshine: [\d]*.?[\d]*/'; 
//test 
foreach($testInputs as $testInput) 
{ 
preg_match($pattern, $testInput, $matches, PREG_OFFSET_CAPTURE); 
print($testInput); 
print_r($matches); 
print("<br>"); 
} 

Ausgang

sunshine: 7 h Array ([0] => Array ([0] => sunshine: 7 [1] => 1)) 
sunshine: 7.5 h Array ([0] => Array ([0] => sunshine: 7.5 [1] => 1)) 
sunshine: 0.5 h Array ([0] => Array ([0] => sunshine: 0.5 [1] => 1)) 
+0

Was ist, wenn jemand '7,5' anstelle von' 7,5' eingegeben hat? – RomanPerekhrest

Antwort

1

Einfach Klammern erfasst gewünschten Ziffern hinzu:

'/sunshine: ([\d]*.?[\d]*)/' 

Das führt Ihre preg_match mit out PREG_OFFSET_CAPTURE:

preg_match($pattern, $testInput, $matches); 

Und in Ihrem matches[1] Array erhalten Sie das gewünschte Ergebnis gefunden.

+0

Woaw so einfach, wie könnte ich das vermissen. Danke @ fusion3k, funktioniert perfekt! – HixField