-1

風向の状態を確認するための正規表現を書きたい。次のようなユーザーからの入力が必要です。

BETWEEN (45 AND 90) OR (270 AND 320)

BETWEENANDそしてORもちろんキーワードです。括弧内に複数の条件があります()OR

例えば:

BETWEEN (45 AND 90)

BETWEEN (45 AND 90) OR (270 AND 320)

BETWEEN (15 AND 40) OR (170 AND 200) OR (270 AND 320)

BETWEEN (45 AND 90) OR (270 AND 320) OR (220 AND 240) OR (270 AND 320)

数値は0から360の間でなければなりません。複数の条件を入力するオプションをユーザーに提供したいと思います。

4

4 に答える 4

2

これにより、行が検証され、括弧間の一致が返されます。また、数値が0から360の間であることを保証します。

^BETWEEN(?:\s*(\((?:[0-2]?[0-9]?[0-9]|3[0-5][0-9]|360)\s+(?:AND)\s+(?:[0-2]?[0-9]?[0-9]|3[0-5][0-9]|360)\))\s*(?:(OR)(?!$))?)+$

成功:

BETWEEN (45 AND 90)
BETWEEN (45 AND 90) OR (270 AND 320)
BETWEEN (15 AND 40) OR (170 AND 200) OR (270 AND 320)
BETWEEN (45 AND 90) OR (270 AND 320) OR (220 AND 240) OR (270 AND 320)

失敗:

BETWEEN (361 AND 90)
BETWEEN (15 AND 40) OR (170 AND 459) OR (270 AND 320)
BETWEEN (45 AND 90) OR (270 AND 320) OR (220 AND 240) OR (270 AND 320) OR
BETWEEN (45 AND 90) OR (270 AND 320) OR (220 AND 240) OR (270 AND 320) ORR
BETWEEN (45 AND 90) OR (270 AND 320) OR (220 AND 240) OR (270 AND 320) OR 

また、キャプチャされないグループを利用(?: )して、のみ(### AND ###)がキャプチャされるようにします。

于 2012-10-03T16:16:47.537 に答える
1

これを試して:

/^BETWEEN \(([0-2]?[0-9]?[0-9]|3[0-5][0-9]|360) AND ([0-2]?[0-9]?[0-9]|3[0-5][0-9]|360)\)( OR \(([0-2]?[0-9]?[0-9]|3[0-5][0-9]|360) AND ([0-2]?[0-9]?[0-9]|3[0-5][0-9]|360)\))*$/

これはかなり長いですが、最後や最初ではなく、複数の方向OR の間にあることを確認します。長さの数値文字列は、0(または000)から360までの数値のみであることも確認します。

ORただし、文字列をで分割するAND方が簡単な解決策であるかどうかを検討する必要があります。

于 2012-10-03T15:44:53.947 に答える
0

これはトリックを行う必要があります

/BETWEEN ( ?\(\d+ (AND) \d+\)( OR)?)+/

于 2012-10-03T15:32:45.527 に答える
0

この正規表現を使用して、データを検証できます...

/BETWEEN (( OR )?\(\d+ AND \d+\))+/

編集

複雑な要件を解決する単一の正規表現を作成することは、次にいくつかの変更のために正規表現にアクセスするときに非常に悪い考えです。代わりに、

コードをさまざまな部分に分割します...

1>正しい形式かどうかを確認します BETWEEN (( OR)? \((\d+) AND (\d+)\))+

2>グループにアクセスして個々の値を確認し、単純なif-else構成と比較します

于 2012-10-03T15:33:15.077 に答える