gpt4 book ai didi

php - 使用哪个正则表达式将此字符串转换为数组?

转载 作者:搜寻专家 更新时间:2023-10-31 21:15:08 26 4
gpt4 key购买 nike

从 mysql 中的地理空间列中,我得到以下字符串值,我想将其转换为数组。最终目标是将其转换为 geoJSON。

POLYGON((4.885838 52.388063,4.891061 52.388381,4.890973 52.382909))

这个字符串有 3 个坐标对,x 和 y 坐标用空格分隔,坐标对用逗号分隔。确切的数字未知且可变。此外,POLYGON 可以采用三种不同的设置。

以我对 reg 的一点了解。我想到的表达式:

$pat = '/^(POLYGON|LINESTRING|POINT)(\(\() (.....) (\)\))$/';
preg_match($pat, $str, $matches);

坐标中带双括号的部分为不确定部分。

谁能帮我解决这个问题?

编辑 最终生成的数组应该如下所示:

$array['type'] = POLYGON | LINESTRING ....
$array['coordinates'] = array of all the coordinates.

最佳答案

最好分阶段解决这个问题。只有第一阶段需要使用正则表达式:

  1. 将整个坐标字符串作为一个 glob,例如:

    "4.885838 52.388063,4.891061 52.388381,4.890973 52.382909"

  2. 将该字符串拆分为以逗号分隔的坐标对。在 Python 中,我们会使用 str.split(',')。我相信您的 PHP 等效项称为 explode()

    [ "4.885838 52.388063", "4.891061 52.388381", "4.890973 52.382909"]

  3. 将每个坐标对分成两个由空格分隔的数字:str.split(' ')

    [ ["4.885838","52.388063"] , ["4.891061","52.388381"] , ["4.890973","52.382909"] ]

  4. 转换为 float 。在 Python 中,我们使用 float():您的本地等效项可能称为 str2float() 或类似名称。

    [ [4.885838,52.388063] , [4.891061,52.388381] , [4.890973,52.382909] ]

要查找第 1 步的数字字符串,请尝试正则表达式

([-]?\d+.\d+ [-]?\d+.\d+)((,[-]?\d+.\d+ [-]?\d+.\d+)+)?

它会找到至少一对 x y 格式的坐标,坐标对之间用逗号分隔。您可以在 regexr 上查看正在运行的正则表达式.

关于php - 使用哪个正则表达式将此字符串转换为数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10579889/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com