如何为REST API过滤正则添加null匹配条件及优化建议
股票交易API动态过滤正则:支持null字面量及优化方案
修改后的正则表达式
针对你需要支持两种过滤格式(方括号包裹值/null字面量)的需求,调整后的正则如下:
^\s*(?<property>[\w-]+)\s+(?<operator>-\w+)\s+(?:\[(?<comparisonValue>(?:\\.|[^\[\]])*)\]|(?<nullValue>null))\s*$
正则说明
^和$:锚定字符串首尾,确保整个输入完全匹配,避免部分无效内容被误匹配(?<property>[\w-]+):捕获交易字段名,允许字母、数字、下划线和连字符(符合常见字段命名规则,可根据实际字段规则调整)(?<operator>-\w+):捕获运算符,确保以短横线开头,后续为合法标识符(如-eq、-ne、-gte等)(?:\[(?<comparisonValue>(?:\\.|[^\[\]])*)\]|(?<nullValue>null)):非捕获分支组,处理两种比较值场景:- 方括号包裹的普通值:支持转义的方括号(如
\[),避免内部方括号导致匹配提前终止 null字面量:单独捕获该场景,便于后端代码判断
- 方括号包裹的普通值:支持转义的方括号(如
优化建议
限制字段与运算符的合法字符
原正则使用.*?会匹配任意字符(包括空格),容易导致错误输入(如Result Test -eq [Win]会被误判),改用[\w-]+和-\w+能严格限制合法的字段名和运算符格式。支持转义方括号
如果业务允许比较值中包含方括号,正则中(?:\\.|[^\[\]])*的写法可以正确匹配转义后的\[和\],避免匹配中断。大小写不敏感配置
若需要支持NULL/Null这类大小写变体,可在正则末尾添加i标志(如/.../i),或修改为(?i)null来忽略大小写。避免非必要的惰性匹配
原正则中.*?的惰性匹配可能导致性能损耗,改用明确的字符集(如[\w-]+)能提升匹配效率,同时避免歧义。
示例匹配验证
- 合法输入匹配:
Result -eq [Win]→ property:Result, operator:-eq, comparisonValue:WinProfit -ne null→ property:Profit, operator:-ne, nullValue:nullTrade-Date -gte [2024-01-01]→ property:Trade-Date, operator:-gte, comparisonValue:2024-01-01
- 非法输入不匹配:
Result-eq [Win](字段与运算符间无空格)Result -eq Win(非null值未用方括号包裹)Result - eq [Win](运算符含空格)
内容的提问来源于stack exchange,提问作者user13842370
相关产品推荐
相关产品推荐

