2016-08-20 14 views
1

私はこの形式の文字列を持っています。文字列からlat/lngを取得する正規表現

"1784_Anarchy +ブリュ+コ〜ユニット+ 5 +ホワイトハウス+農家+センター〜Stannington〜モーペス〜NE61 + 6AW_^55.13033〜-1.702607"

はパターンが

preg_match_all("\^d+\", $map, $out, PREG_PATTERN_ORDER); 
のようになります。

だから、lat - \ d d + .d +? lng - \〜d + .d +?緯度と長い値を取得しようとして

- 緯度:55.13033 LNG:緯度とLNGの文字列の位置が一定に維持した場合-1.702607

+0

文字列の形式を取得しようとしていますか? –

+0

preg_match_all( '((?:\ d +)(?:\。\ d *)?)'、$ map、$ out、PREG_PATTERN_ORDER); - すべての数字を取得する –

+0

55.13033と-1.702607 –

答えて

2

を、ここではその周りに簡単な方法です。ポスト他の例

$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

よくあるのですが、アドレスフィールドは同じですが、座標に近いところには^とa〜が付いています。 –

+0

はここにありますあなたは1784を持っていますが、もし次のアドレスがあればユニットがありません5 –

+0

1784は見えませんが、いつも^と〜と一致することができます –

0

他以下の正規表現式は、座標を分離する必要があります)

​​

内部ブロック(オプションと一致します「 - 」負LAT/LONG 1〜3のグループが続くため桁数(経度は180まで可能)、その後に「ドット」が続きます。

残りの式は、5〜6桁の数字に一致します(例のように精度が高い)。

限り、検索文字列が多かれ少なかれ1が述べたように、これは動作するはず保つよう:

Demo

・ホープ、このことができます!

+0

これは値の極性を取得しますか? –

関連する問題