使用正则校验MULTIPOLYGON文本

1,248 阅读1分钟

MULTIPOLYGON(多边形组)数据格式

  • 一个多边形组由多个(2个及以上)多边形(polygon)构成,每个多边形分别绘制,互不干扰。
  • 一个多边形由多个(3个及以上)点构成,顺序连接这些点,绘制多边形。
  • 一个点由经度值和纬度值构成,经度值在前,纬度值在后,经度值和纬度值都必须有值,经度值和纬度值之间使用1或多个空格分隔。
  • 点与点之间使用英文逗号分隔,点与点之间除了存在英文逗号,还可以存在空格。
  • 点集合使用 (())包裹,构成一个polygon。
  • polygon之间使用英文逗号分隔,polygon与polygon之间除了必须存在的英文逗号,还可以存在空格。
  • polygon集合用"MULTIPOLYGON ()包裹。

MULTIPOLYGON文本demo

MULTIPOLYGON (((116.410188 39.879957, 116.410703 39.897555, 116.402292 39.892353, 116.389846 39.891365)),((116.355492 39.903757, 116.367659 39.87677, 116.359377 39.879167, 116.322297 39.873318, 116.326933 39.892616, 116.339549 39.898345)))

校验正则的实现

  • 经度值/纬度值
(\d+|\d+\.\d+)
  • : 经度和纬度之间用1或多个空格分隔
(\d+|\d+\.\d+)\s+(\d+|\d+\.\d+)
  • 一个和后缀
  • 后缀
(\s*,\s*(?=\d)|\s*(?=\)\)))
  • 后缀
((\d+|\d+\.\d+)\s+(\d+|\d+\.\d+)(\s*,\s*(?=\d)|\s*(?=\)\))))
  • 一个polygon
(\(\((((\d+|\d+\.\d+)\s+(\d+|\d+\.\d+)(\s*,\s*(?=\d)|\s*(?=\)\)))){3,})\)\))
  • 一个polygon后缀
  • 后缀
(\s*,\s*(?=\(\()|\s*(?=\)))
  • polygon后缀
(\(\((((\d+|\d+\.\d+)\s+(\d+|\d+\.\d+)(\s*,\s*(?=\d)|\s*(?=\)\)))){3,})\)\)(\s*,\s*(?=\(\()|\s*(?=\))))
  • 最终实现
^\s*MULTIPOLYGON\s*\((\(\((((\d+|\d+\.\d+)\s+(\d+|\d+\.\d+)(\s*,\s*(?=\d)|\s*(?=\)\)))){3,})\)\)(\s*,\s*(?=\(\()|\s*(?=\)))){2,}\)\s*$

可视化正则

实现的效果