0

我有以下问题:我将 WKT 从 DB 动态导入 WKT Wicket Javascript 库。我必须做一些替换以正确适应 WKT。由于 mysql 获取 WKT AsText(SHAPE) 我收到了几个数组,例如 POLYGON((xxxx))、POLYGON((yyyy)) 等等。首先,我必须删除所有“POLYGON”

$str = preg_replace('/^POLYGON/', '', $WKT[1]);  

并在之前添加 MULTIPOLYGON<?php

在检票口标记。有用。其次,我必须在多边形之间添加逗号,准确地说是在 "))((" 括号之间:

$str2 = str_replace(array('((', '))'), array('((', ')),'), $str);    

它有效,但最后一个逗号仍然是“轻微”变形我的多面体:MULTIPOLYGON((xxx)),((yyy)),((zzz)),

如何删除最后一个逗号?

我会感谢每一个正则表达式或其他可以解决我的问题的解决方案。

4

2 回答 2

1

在任何字符串中,如果您确定后面没有 X,则可以删除最后一个 X。因此,您可以使用负前瞻: (,)(?!.*,),如此处所示并将其替换为空字符串。

$result = preg_replace('/(,)(?!.*,)/', '', $str)

不过,这不会查看上下文,它只会删除任何字符串的最后一个逗号,无论它在哪里。

于 2015-07-03T12:32:38.793 回答
-1

谢谢你们 - 你的回答是正确的,非常有帮助。

问题不是字符串替换。更多的是从数据库中获取的数据。mysqli_fetch_array 和 mysqli_fetch_assoc 为获取的 3 行返回 stringstringsring 或 arrayarrayarray。这就是为什么所有的逗号都被替换了。

我改为mysqli_fetch_all,然后对每一行(作为数组)进行小幅替换,并将每一行作为变量内爆。将它们合并为单个变量后,我可以应用您的解决方案。这不是复杂的解决方案,但是如果将其打包到功能中就可以了。

($WKT = mysqli_fetch_all($result)) {
$str = preg_replace('/POLYGON/', '', $WKT[0]);
$str1 = preg_replace('/POLYGON/', '', $WKT[1]);
$str2 = preg_replace('/POLYGON/', '', $WKT[2]);
$str3 = implode($str);
$str4 = implode($str1);
$str5 = implode($str2);
$str6 = $str3 . $str4 . $str5;
$str7 = preg_replace('/\)\)/', ')),', $str6);
$str8 = rtrim($str7, ",");
echo $str8;
}
于 2015-07-03T16:26:14.617 回答