从较大的文本正文中获取逗号分隔的纬度和经度值[重复]

问题描述 投票:0回答:6

我有一根像下面这样的字符串:

".......mapsearch"), '52.486683, -4.044363', options......"

我想从字符串中检索 2 个数字(长和纬度) - 我不介意是否将它们作为单个字符串一起检索,并在中间包含逗号和空格。

我知道我想使用一个表达式来匹配并忽略从开始到包括

mapsearch"), '
的任何内容,对于字符串结尾到
', options
模式也是如此。

更新

该字符串还将包含一系列其他字符,例如 { } ( ) = : / 以及所需匹配项前后的数字..

php regex preg-replace text-extraction
6个回答
3
投票

这会起作用,尽管它很丑:

/mapsearch\"\), '(-?\d+(?:\.\d+)?), (-?\d+(?:\.\d+)?)', options/

数字可以是负数或正数,并且它也会匹配整数和小数值。该模式将返回两个数字作为一个单独的组。


1
投票
preg_match("/'([^,]+), ([^']+)'/", $string, $matches);
echo $matches[0]; // 52.486683
echo $matches[1]; // -4.044363

0
投票

假设它是唯一用单引号括起来的数字:

'-?\d+.\d+, -?\d+.\d+'

0
投票

你可以试试这个:

(\-?[0-9]+\.[0-9]+\,\ \-?[0-9]+\.[0-9]+)

提取

52.486683,-4.044363


0
投票

在这种情况下,我会使用 Metalfrog 的解决方案并进行一些更改。

如果您确定只有字符串有逗号,没有其他内容,则爆炸,然后检查它是否是整数/浮点数,或者如果您知道它是第 n 项,则只需获取 $array[$n]。

否则爆炸并使用this(需要一些编辑)来确定它是否是坐标。


0
投票
$subject = ".....mapsearch\"), '52.486683, -4.044363', options......";
$regex = '/mapsearch\"\), \'(-?[0-9]{1,3}\.[0-9]{6}, -?[0-9]{1,3}\.[0-9]{6})\', options/';
if (preg_match($regex, $subject, $matches)){
    print_r($matches);

这会给你:

Array
(
    [0] => mapsearch"), '52.486683, -4.044363', options
    [1] => 52.486683, -4.044363
)
© www.soinside.com 2019 - 2024. All rights reserved.