如何编写正则匹配前缀不带/的版本号子串
正则匹配无前置斜杠的版本号解决方案
问题根因
- 初始编写的正则
[0-9]+.[0-9]未对.做转义处理,正则中.为通配符,可匹配任意单个字符,会误命中12a3这类非版本号内容 - 尝试使用的
(?!/)为负向前瞻断言,作用是校验当前位置后方的内容不匹配/,而需求是校验版本号前方是否存在/,断言方向完全错误,因此无法过滤前缀带/的内容
实现方案
方案1:主流环境通用(支持负向后行断言)
Python 3.7+、JavaScript ES2018+、Java 9+、PHP 7.2+等绝大多数新版本正则引擎都支持负向后行断言,直接使用如下正则即可:(?<!/)\d+\.\d+
验证效果:
输入
Hellothisisastring 12.3 blabla→ 成功匹配12.3,符合预期
输入Hellothisisastring /12.3 blabla→ 无匹配结果,符合预期
方案2:旧环境兼容(不支持负向后行断言)
如果使用的正则引擎不支持负向后行断言,可以通过捕获组实现,正则如下:(?:^|[^/])(\d+\.\d+)
使用时提取第一个捕获组的内容,就是目标版本号。
内容的提问来源于stack exchange,提问作者Kong Konfus
相关产品推荐
相关产品推荐

