/ / PHP Regex fehlende Erfassungsgruppe - PHP, Regex

PHP Regex fehlende Erfassungsgruppe - PHP, Regex

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 № 1

Da 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 °.