Nginx正则匹配优化:合并捕获组并支持逗号分隔同模式URI
解决方案
修改后的Nginx Location正则配置
location ~ "^/live/midrate/v1/rates/((?:[A-Z]{6}-(?:SPT|ON|W[1-3]|M[1-9][0-9]?|Y[2-5])-[DO]-[ON])(?:,(?:[A-Z]{6}-(?:SPT|ON|W[1-3]|M[1-9][0-9]?|Y[2-5])-[DO]-[ON]))*)$"
关键调整说明
仅保留1个捕获组:
将所有子规则用非捕获组(?:...)包裹,只在最外层保留一对捕获括号(...)。这样整个匹配的目标字符串(单个或多个逗号分隔项)会被唯一的捕获组1捕获,不会产生多余的空捕获组。支持逗号分隔的多格式URI:
- 先定义单个合法格式的非捕获组:
(?:[A-Z]{6}-(?:SPT|ON|W[1-3]|M[1-9][0-9]?|Y[2-5])-[DO]-[ON]) - 追加
(?:,(?:单个格式组))*,其中*允许0次或多次重复,实现匹配1个或多个以逗号分隔的同格式项。
- 先定义单个合法格式的非捕获组:
匹配结果验证
- 单个请求URI:
live/midrate/v1/rates/GBPUSD-SPT-D-O
匹配结果:Match found Capture Groups 1: GBPUSD-SPT-D-O - 多逗号分隔请求URI:
live/midrate/v1/rates/GBPUSD-SPT-D-O,EURUSD-M1-D-O,EURGBP-SPT-O-O
匹配结果:Match found Capture Groups 1: GBPUSD-SPT-D-O,EURUSD-M1-D-O,EURGBP-SPT-O-O
内容的提问来源于stack exchange,提问作者kamranonline
相关产品推荐
相关产品推荐

