Php 从字符串获取lat/lng的正则表达式

Php 从字符串获取lat/lng的正则表达式,php,regex,Php,Regex,我有一个这种格式的字符串 “1784_无政府状态+Brew+Co~Unit+5+Whitehouse+Farm+Centre~Stannington~Morpeth~NE61+6AW_^55.13033~-1.702607” 这个图案看起来像什么 preg_match_all("\^d+\", $map, $out, PREG_PATTERN_ORDER); 那么lat--^d+.d+? 液化天然气--\~d+.d+ 尝试获取lat和long值-- 拉脱维亚:55.13033 lng:-1.7

我有一个这种格式的字符串

“1784_无政府状态+Brew+Co~Unit+5+Whitehouse+Farm+Centre~Stannington~Morpeth~NE61+6AW_^55.13033~-1.702607”

这个图案看起来像什么

preg_match_all("\^d+\", $map, $out, PREG_PATTERN_ORDER);
那么lat--^d+.d+? 液化天然气--\~d+.d+

尝试获取lat和long值-- 拉脱维亚:55.13033
lng:-1.702607

如果lat和lng管柱位置保持不变,这里有一个快速解决方法。否则,请发布其他实例

$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
$str='1784_无政府状态+Brew+Co~Unit+5+Whitehouse+Farm+Centre~Stannington~Morpeth~NE61+6AW_^55.13033~-1.702607';

preg_match_all(“/(?以下正则表达式应隔离坐标:

(-?\d{1,3}\.)\d{5,6}
内部的块()将匹配一个可选的“-”以表示负纬度/经度,后跟一组1到3位数字(因为经度可以高达180),后跟一个“点”

表达式的其余部分将匹配5到6位数字(根据您的示例中的精度)

只要搜索字符串保持与所述字符串大致相同,就应该可以:


希望这有帮助!!

您想从字符串中得到什么?preg\u match\u all('(((?:\d+(:\.\d*)?)',$map,$out,preg\u PATTERN\u ORDER);--获取所有的数字55.13033和-1.702607好吧--这取决于地址字段是否相同--它们在坐标附近有一个^和一个~是没有办法进入的--所以这里有1784--但是如果下一个地址没有单元5我看不到1784--但是你总是可以匹配^它在另一个字符串上失败了。1399_Anchor+Springs+Brewery+Company+Ltd^ The~11D+Lineside+Way~ Lineside+Industrial+Estate~Littlehampton~BN17+7EH_^50.815639~-0.554158”/(?这是否反映了价值的极性?