schreib doch einfach mal wie das gehen soll, wenn nciht auf ZAHL eines der Zeichen folgen soll? Wie kann ich denn ZAHL[°'"] matchen, wenn die nicht in einer klasse sind? Ich will nicht ZAHL°ZAHL'ZAHL" finden, sondern alle Zahlen die vor eines der drei Zeichen stehen.
Dann suchst du nicht eine Geopositionsangabe sondern etwas Disparates.
Verlässlichkeit kommt durch verlässliche Muster. Basta
In Perl
$geopos =~ m/
^ # falls du es mit einer Variable hast
( [+-]? ) # $1 Vorzeichen
(?:
( # $2
1?[0-9][0-9] # geopositionen gehen bis +/- 180 Grad
)
°
)? # optional
(?:
( # $3
[1-5][0-9] # 59 Minuten ist di höchste Minutenangabe
)
'
)? # optional
(?:
( # $4
[1-5][0-9] # 59 Sekunden ist der höchste ganzzahlige Sekundenanteil
(?: # optional Nachkomma
[,.]
[0-9]{1,3}
)? # optional
)
)? # optional
"
\s? #optional Whitespace
(?-i:e|ö|w|n|s).[LlBb]. # Engisch/Deutsch
/x;
Die Frage ob Grade Minuten oder Sekunden optional sind, oder auch für Greenwich Pflicht, musst du selber wissen.
Zur Umwandlung nach PHP einfach allen Whitespace entfernen.
Ich behaupte nicht, dass dies ein normativer String für Geopositionen ist. Ich behaupte aber, dass dies die Richtige Form einer regex ist, welche dir mindestens etwas verlässliches zurückgeben kann, wenn auch eventuell einen leeren Inhalt.
Du wirst immer in $1 ein Vorzeichen haben oder nichts
Du wirst immer in $2 eine Gradangabe haben oder nichts
..
..
mfg Beat