2

特定の正規表現パターンのすべての可能な一致の数を見つける方法を知っている人はいますか? つまり、次のようなものです。

Calculator_1_([0-1]) は、2 つの異なる入力に一致する可能性があるため、2 つの可能な結果を​​返します。

 -Calculator_1_0
 -Calculator_1_1

Calculator_1_([0-2]) は、3 つの異なる入力に一致する可能性があるため、3 つの可能な結果を​​返します。

 -Calculator_1_0
 -Calculator_1_1
 -Calculator_1_2

Calculator_1_(.*) は、無限の入力に一致する可能性があるため、infinite を返します。

 -Calculator_1_0
 -Calculator_1_1
 -Calculator_1_2
 -Calculator_1_3
 -Calculator_1_a
 ...

編集:これは単なる例です。

4

1 に答える 1

0

このような機能は、Rubyライブラリ(私が知っている)には組み込まれていません。これを適切に行うには、正規表現を断片に解析して、(たとえば)次のものを適切に区別できるようにする必要があります。

 /1+/   # Infinite possibilities
 /1\+/  # 1 possibility
 /1\\+/ # Infinite possibilities
 /[1+]/ # 1 possibility

それが行われると、、、、または修飾子を持つ正規表現を早期に開始し、すべての(関連する)修飾子と修飾子を正確なカウントに変換し、すべての文字クラスを数値のセットに変換し、拡張するのは比較的「簡単な*+作業{n,}?なり{n,m}ます[…]。 (乗算)a|b交互および(a?b){2,3}グループ化された式内の結果。

しかし、現在、正規表現を簡単かつ正確に解析することができないことを考えると、この概念は水中で死んでいます。それで、私は恐れます、あなたの考えです。問題を解決する別の方法を見つける時が来ました。

たとえば、すべての正規表現にスレッドを使用し、のブロック形式をscan使用して一致を並行して処理し、それ以降のすべてのスキャンを停止して、最も早い完了で中止するのはどうでしょうか。

于 2012-08-08T03:15:04.607 に答える