Ich versuche, mehrere Koordinaten zu analysieren, aber PHP preg_match fehlt eine Fanggruppe. Es funktioniert in jedem Regex-Simulator, den ich getestet habe, aber nicht in meinem Code. Gruppe 4 kommt immer leer aus;
$coordinates = "N40.765775° E8.303369°";
// -40.765775° -8.303369°
// 40.765775° 8.303369°
// -40.765775° 8.303369°
// N40.765775° E8.303369°
// S40.765775° E8.303369°
// N40.765775° W8.303369°
// S40.765775° W8.303369°
$regex = "/([-NnSs]?)D*([0-9]?[0-9]).(d{1,10}+)Dh*([-EeWw]?)D*([0-1]?[0-9]?[0-9]).(d{1,10}+)/";
if (preg_match($regex, $coordinates, $matches)) {
print_r($matches);
} else {
echo "no matches";
}
Antworten:
2 für die Antwort № 1Da Sie Zeichenketten mit Multibyte-Zeichen (°) analysieren, sollten Sie den Unicode hinzufügen Modifikator, d.h. u
am Ende der Regex.
/ /u
Nur als Beispiel: Ohne diesen Modifikator würden Sie einen hinzufügen .
nach D
, Hier:
D.h*([-EeWw]?)
... dann würden Sie das "E" in der vierten Fanggruppe erfassen. Damit D.
entspricht tatsächlich dem Multibyte-Zeichen °
.