我有一根像下面这样的字符串:
".......mapsearch"), '52.486683, -4.044363', options......"
我想从字符串中检索 2 个数字(长和纬度) - 我不介意是否将它们作为单个字符串一起检索,并在中间包含逗号和空格。
我知道我想使用一个表达式来匹配并忽略从开始到包括
mapsearch"), '
的任何内容,对于字符串结尾到 ', options
模式也是如此。
更新
该字符串还将包含一系列其他字符,例如 { } ( ) = : / 以及所需匹配项前后的数字..
这会起作用,尽管它很丑:
/mapsearch\"\), '(-?\d+(?:\.\d+)?), (-?\d+(?:\.\d+)?)', options/
数字可以是负数或正数,并且它也会匹配整数和小数值。该模式将返回两个数字作为一个单独的组。
preg_match("/'([^,]+), ([^']+)'/", $string, $matches);
echo $matches[0]; // 52.486683
echo $matches[1]; // -4.044363
假设它是唯一用单引号括起来的数字:
'-?\d+.\d+, -?\d+.\d+'
你可以试试这个:
(\-?[0-9]+\.[0-9]+\,\ \-?[0-9]+\.[0-9]+)
提取
52.486683,-4.044363
在这种情况下,我会使用 Metalfrog 的解决方案并进行一些更改。
如果您确定只有字符串有逗号,没有其他内容,则爆炸,然后检查它是否是整数/浮点数,或者如果您知道它是第 n 项,则只需获取 $array[$n]。
否则爆炸并使用this(需要一些编辑)来确定它是否是坐标。
$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
)