我正在尝试创建一个正则表达式来解析以下 2 个字符串
Country eq 'United States' and Value eq 1234.45M and CreatedOn eq '2013-06-05T06:04:23.2111146Z'
Value eq 1234.45M and Status eq 'Active' and CategoryID eq 1 and Country eq 'United States'
基本上这些是$filter中指定的 OData 查询字符串。请注意,这是为了提供有限的 Odata 支持,因此示例字符串只有eq和and。
这是我到目前为止所拥有的
(\w+)\seq\s\'{0,1}([0-9a-zA-Z,*=@#$&()-_+=!]*)\'{0,1}
这在大多数情况下都有效,除了当我在引号字符串中有一个空格时,例如“美国”(注意美国和美国之间的空格),它只拾取“美国”
我尝试将 \s 添加到要捕获的字符范围中
(\w+)\seq\s\'{0,1}([0-9a-zA-Z,*\s=@#$&()-_+=!]*)\'{0,1}
但这会使捕获的组失控,因为字符串本身可以包含空格来分隔名称和值(Value eq 1234)<-请注意分隔Value和eq的空格
任何有关修复/重新创建上述正则表达式的指导将不胜感激。
更新:我还需要支持额外的过滤操作,例如('or','startswith','endswith','substringof')。
示例: $filter = Country eq 'United States' and Value eq 1234.45M and substringof('Alfreds', CompanyName) eq true or startswith(CompanyName, 'Alfr') and endswith(CompanyName, 'Futterkiste')