次の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およびのみが含まれていることに注意してください。
これは私がこれまでに持っているものです
(\w+)\seq\s\'{0,1}([0-9a-zA-Z,*=@#$&()-_+=!]*)\'{0,1}
これは、「United States」などの引用符で囲まれた文字列にスペースがある場合 (United States と States の間のスペースに注意してください)、 「United」のみを取得することを除いて、ほとんどの場合機能します。
そのようにキャプチャする文字の範囲に \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 endwith(CompanyName, 'Futterkiste')