求用于验证MultiPolygon WKT格式的正则表达式
验证WKT格式MultiPolygon的正则表达式
基础版正则(不区分大小写)
这个正则可以匹配标准的MultiPolygon WKT字符串,支持整数、小数坐标,兼容合理的空格变化:
^(?i)MULTIPOLYGON\s*\(\s*(\(\s*\(\s*([-+]?\d+(\.\d+)?\s+[-+]?\d+(\.\d+)?\s*(,\s*[-+]?\d+(\.\d+)?\s+[-+]?\d+(\.\d+)?\s*){2,}\)\s*\)\s*(,\s*\(\s*\(\s*([-+]?\d+(\.\d+)?\s+[-+]?\d+(\.\d+)?\s*(,\s*[-+]?\d+(\.\d+)?\s+[-+]?\d+(\.\d+)?\s*){2,}\)\s*\)\s*)*\)$
带SRID支持的版本
如果需要兼容带SRID前缀的WKT(比如SRID=4326;MULTIPOLYGON(...)),可以使用这个扩展版本:
^(?i)(SRID=\d+;\s*)?MULTIPOLYGON\s*\(\s*(\(\s*\(\s*([-+]?\d+(\.\d+)?\s+[-+]?\d+(\.\d+)?\s*(,\s*[-+]?\d+(\.\d+)?\s+[-+]?\d+(\.\d+)?\s*){2,}\)\s*\)\s*(,\s*\(\s*\(\s*([-+]?\d+(\.\d+)?\s+[-+]?\d+(\.\d+)?\s*(,\s*[-+]?\d+(\.\d+)?\s+[-+]?\d+(\.\d+)?\s*){2,}\)\s*\)\s*)*\)$
正则规则说明
(?i):开启不区分大小写匹配,兼容multipolygon、MultiPolygon等大小写混合写法(SRID=\d+;\s*)?:可选的SRID前缀规则,匹配类似SRID=4326;的格式,支持前缀后带空格MULTIPOLYGON\s*\(:匹配类型标识开头,允许标识与括号间有任意空格(\(\s*\(\s*...\)\s*\)):匹配单个多边形的双层括号结构,支持括号间的任意空格[-+]?\d+(\.\d+)?:匹配正负整数或小数格式的坐标值(x或y){2,}:要求每个多边形的坐标对数量至少为3,保证多边形能形成闭合结构- 外层
(...)*:支持多个多边形组合,多边形间用逗号分隔,兼容分隔符前后的空格
测试用例
合法匹配示例:
MULTIPOLYGON (((0 0, 0 1, 1 1, 0 0)), ((2 2, 2 3, 3 3, 2 2)))multipolygon(((1.5 2.5, 3.5 4.5, 5.5 6.5,1.5 2.5)))SRID=4326;MULTIPOLYGON (((-10 -20, -10 20, 10 20, -10 -20)))
非法不匹配示例:
POLYGON (((0 0, 0 1, 1 1, 0 0)))(类型错误,不是MultiPolygon)MULTIPOLYGON (((0 0, 0 1, 0 0)))(多边形仅2个有效点,无法形成闭合结构)MULTIPOLYGON ((0 0, 0 1, 1 1, 0 0))(缺少多边形要求的双层括号)
注意:正则仅能做语法层面的格式校验,无法验证多边形的拓扑合法性(比如自相交、点顺序错误等)。如果需要完整的合法性校验,建议使用专业GIS库(如Shapely、GeoTools等)。
内容的提问来源于stack exchange,提问作者Meursault
相关产品推荐
相关产品推荐

