2016-08-20 2 views
1

Ich habe eine Zeichenkette in diesem Format.Regulärer Ausdruck, um lat/lng von einer Zeichenkette zu erhalten

"1784_Anarchy + Brew + Co ~ Einheit + 5 + Whitehouse + Farm + Zentrum ~ Stannington ~ ~ Morpeth NE61 + 6AW_^55,13033 ~ -1,702607"

Wäre das Muster in etwa so aussehen

preg_match_all("\^d+\", $map, $out, PREG_PATTERN_ORDER); 

so das lat - \^d + .d +? die lng - \ ~ d + .d +?

versuchen, die lat und lange Werte zu erhalten - lat: 55,13033 lng: -1,702607

+0

Was möchten Sie von der Zeichenfolge erhalten? –

+0

preg_match_all ('((?: \ D +) (?: \. \ D *)?)', $ Karte, $ out, PREG_PATTERN_ORDER); - alle Zahlen holen –

+0

55.13033 und -1.702607 –

Antwort

2

Wenn lat und lng String Position konstant bleiben, ist hier ein schneller Weg, um ihn herum. else Post andere Fälle

$str = '1784_Anarchy+Brew+Co~Unit+5+Whitehouse+Farm+Centre~Stannington~Morpeth~NE61+6AW_^55.13033~-1.702607'; 

preg_match_all("/(?<=[\^|\~])\-?([\d\.]+)/", $str, $matches); 
$lat = $matches[0][0]; 
$lng = $matches[0][1]; 

echo "lat: $lat, Lng: $lng"; 

//output: lat: 55.13033, Lng: -1.702607 
+0

gut - es hängt davon ab, obwohl das Adressfeld das gleiche ist - sie haben ein^und ein ~ in der Nähe der Koordinaten gibt es keine Möglichkeit, das –

+0

anzuzapfen - so hier Sie haben 1784 - aber was ist, wenn es nächste Adresse - hat keine Einheit 5 –

+0

ich sehe nicht 1784-- aber Sie können immer^und ~ –

0

der folgende reguläre Ausdruck sollte Koordinaten isolieren:

(-?\d{1,3}\.)\d{5,6} 

Der Block innerhalb() ein optional Übereinstimmen '-' für negative LAT/LONG gefolgt von einer Gruppe von 1 bis 3 Ziffern (als Länge kann bis zu 180) gefolgt von einem "Punkt".

Der Rest des Ausdrucks wird von 5 bis 6 Ziffern übereinstimmen (gemäß der Genauigkeit, die in Ihrem Beispiel scheint).

Solange der Suchbegriff mehr halten oder weniger wie die angegeben ist, sollte diese Arbeit:

Demo

hoffe, das hilft !!

+0

erfasst dies die Polarität des Wertes? –

Verwandte Themen