Search code examples
phpregexpolygonswkt

PHP: remove last comma of a multipolygon


I have following issue: I import WKT dynamicaly from DB into WKT Wicket Javascript library. I must do some substitutions to fit the WKT correctly. Since mysql fetches WKT AsText(SHAPE) i recive several arrays e.g. POLYGON((xxxx)),POLYGON((yyyy)) and so on. First, I had to remove all "POLYGON" doing

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

and add MULTIPOLYGON before <?php

tag in the wicket. It works. Second, I must add comma between polygons, preicisely between "))((" brackets:

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

It works but last comma remains what "slightly" deforms my multipolygon: MULTIPOLYGON((xxx)),((yyy)),((zzz)),

How can I remove last comma?

I would be thankful for every regex or some other solution which can solve my problem.


Solution

  • In any string, you can remove the last X if you are sure that no X follows. So, you can use a negative lookahead: (,)(?!.*,), as seen here and replace it with empty string.

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

    This doesn't look at the context though, it will just remove the last comma of any string, no matter where it is.