4

論理条件を入力するための入力テキスト ボックスがあります。
可能な入力は次のとおりです。

1 OR 2
1 AND 2
(1 OR 2) AND 3
(1 OR 2) OR 3
(1 AND 2) AND 3
(1 AND 2) OR 3
1 AND (2 OR 3)
1 OR (2 OR 3)
1 AND (2 AND 3)
1 OR (2 AND 3)
(1 OR 2) AND (3 OR 4)
(1 OR 2) OR (3 OR 4)
(1 AND 2) OR (3 AND 4)
(1 OR 2) AND (3 OR 4) AND (5 OR 6)

RegExそのような入力を検証するために誰でも提供できますか?

4

3 に答える 3

2

括弧をネストできると仮定すると、正規表現で任意にネストされた括弧を検証できないため、これをストレートな正規表現で行うことはできません。

この入力を検証するより一般的な方法は、プロセスを 2 つのステップに分割することです。正規表現のファミリーを使用して入力をトークン化し、単純な文法を使用して結果のトークンのシーケンスを検証します。what support のような LALR(1) 文法yaccは、この問題を簡単にします。

任意にネストされた括弧に一致させるために必要な機能を追加する拡張正規表現フォームがいくつかあると思います。私はそれらのどれにもすぐに慣れていないことを認めなければなりません。なぜなら、はるかに単純な一連の一致の周りにいくつかのループ ロジックを記述するよりも、使用するのがすぐに複雑になるからです。

于 2013-07-02T07:27:16.690 に答える