2016-11-29 5 views
1

Ich benutze php preg_match_all einige Teile einer Nachricht wie diese zu extrahieren:php preg_match_all Nicht alle Ergebnisse bekommen

$customerMessage = '"message":"success:2,2;3,3;"' ; 
preg_match_all('/("message":")([a-z0-9A-Z]+):([0-9]+,[0-9]+;)+/', $customerMessage, $matches); 
var_dump($matches); 
die; 

dieser Code ausgegeben wird:

array(4) { 
    [0]=> 
    array(1) { 
    [0]=> 
    string(27) ""message":"success:2,2;3,3;" 
    } 
    [1]=> 
    array(1) { 
    [0]=> 
    string(11) ""message":"" 
    } 
    [2]=> 
    array(1) { 
    [0]=> 
    string(7) "success" 
    } 
    [3]=> 
    array(1) { 
    [0]=> 
    string(4) "3,3;" 
    } 
} 

Warum kann ich Teil 2,2;? Vielen Dank im Voraus!

Antwort

3

Sie können nur die letzte Übereinstimmung einer Gruppe erhalten. Zwei bekommen alle Werte wie x,x; Sie Ihren aktuellen Regex verwenden können, ein wenig verändert:

preg_match_all('/("message":")([a-z0-9A-Z]+):(.*)"/', $customerMessage, $matches); 
/* $matches[3] --> 2,2;3,3; 

Jetzt können Sie Gruppe 3 mit $matches[3] erhalten und alle x,x; mit [0-9]+,[0-9]+;

preg_match_all('/[0-9]+,[0-9]+/', $matches[3], $matches2); 
/* $matches[0] --> 2,2; 
/* $matches[1] --> 3,3; 
+0

Sie können nur die letzte bekommen Match Spiel einer Gruppe! Vielen Dank. Sie haben Recht! – Abadis