1

次の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) <-- Valueeqを区切るスペースに注意してください

上記の正規表現を修正/再作成する際のガイダンスをいただければ幸いです。

更新: ('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')

4

4 に答える 4

1

Try using this regex:

(\w+\seq\s'?[\w\s\.\:\-]+'?)(?= and |$)

Look for the example here.

I am expecting a typo in your sample data:

Country eq 'United States' and Value eq 1234.45M and CreatedOn eq '2013-06-05T06:04:23.2111146Z' and Value eq 1234.45M and Status eq 'Active' and CategoryID eq 1 and Country eq 'United States'

于 2013-06-05T08:41:12.967 に答える