如何用PCRE正则匹配Markdown中格式不符的geo:链接?
适用于grep -P的PCRE正则方案
正则表达式
\(geo:(?![-+]?([1-8]?\d(\.\d+)?|90(\.0+)?),[-+]?(180(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)\))[^)]+\)
完整grep命令
grep -rP '\(geo:(?![-+]?([1-8]?\d(\.\d+)?|90(\.0+)?),[-+]?(180(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)\))[^)]+\)' --include='*.md' ./
逻辑说明
\(geo::精准匹配Markdown中的(geo:链接开头(转义括号避免被正则引擎解析为捕获组)- 负前瞻
(?!...):断言当前位置后不是合规的坐标格式加闭合括号,直接排除所有正确的geo链接 [^)]+\):捕获从geo:之后到下一个)的全部内容,确保完整提取错误格式的geo链接
匹配的错误场景示例
- 冒号后带空格:
(geo: 31.2304,121.4737) - 坐标用空格分隔:
(geo:31.2304 121.4737) - 纬度超出范围:
(geo:91.0,121.4737) - 经度超出范围:
(geo:31.2304,190.0) - 坐标格式无效:
(geo:abc,123)
注意事项
- 部分系统(如macOS)默认grep不支持PCRE,需安装
ggrep(brew install grep)后使用ggrep -P -r参数用于递归搜索目录下所有文件,--include='*.md'限制仅检索Markdown文件
内容的提问来源于stack exchange,提问作者seizedengine
相关产品推荐
相关产品推荐

