(57)【特許請求の範囲】
【請求項１】
第一入力ストリングを第一正規表現セットにマッチングするための装置であって、前記第一正規表現セットは第一アルファベットからの記号を含み、前記装置は、
前記第一正規表現セットから第二アルファベットを設定するための解析コンポーネントと、
前記解析コンポーネントが前記第二アルファベットを設定するのに応じて、第二正規表現セットおよび第三正規表現セットを設定するための更新コンポーネントであって、前記第二正規表現セットは前記第一アルファベットからの記号を含み、前記第三正規表現セットは前記第二アルファベットからの記号を含む、前記更新コンポーネントと、
前記更新コンポーネントが前記第二正規表現セットおよび前記第三正規表現セットを設定するのに応じて、前記第二正規表現セットを第一状態マシンにコンパイルし、前記第三正規表現セットを第二状態マシンにコンパイルするためのコンパイラ・コンポーネントであって、前記第一状態マシンは少なくとも一つの第一条件付き最終状態を含み、前記第二状態マシンは少なくとも一つの第二条件付き最終状態を含み、各第一条件付き最終状態は少なくとも一つの第二条件付き最終状態に対応している、前記コンパイラ・コンポーネントと、
前記ネットワークから前記第一入力ストリングを受信するための入力コンポーネントであって、前記第一入力ストリングは前記第一アルファベットからの記号を含む、前記入力コンポーネントと、
前記入力コンポーネントが前記第一入力ストリングを受信するのに応じて、前記第一入力ストリングを第二入力ストリングに変換するための変換コンポーネントであって、前記第二入力ストリングは前記第二アルファベットからの記号を含む、前記変換コンポーネントと、
前記変換コンポーネントが前記第一入力ストリングを変換するのに応じて、前記第一入力ストリングを前記第一状態マシン中に、前記第二入力ストリングを前記第二状態マシン中に、相並行して入力するためのマシン・コンポーネントと、
前記マシン・コンポーネントが前記第一および第二入力ストリングを入力するのに応じて、前記第一条件付き最終状態を前記対応する第二条件付き最終状態と比較するための比較コンポーネントと、
前記第一条件付き最終状態と前記対応する第二条件付き最終状態とがマッチングするのに応じ、検証済み結果を提供するためのチェック・コンポーネントと、
を含む装置。
【請求項２】
前記装置は、前記チェック・コンポーネントが複数の検証済み結果を提供するのに応じて、前記複数の検証済み結果を検証して、完全検証されたマッチを提供するための出力コンポーネントをさらに含む、請求項１に記載の装置。
【請求項３】
前記第一アルファベットは複数の記号セットを含み、前記解析コンポーネントは、
前記記号セットの各々を一つ以上のマップ済み記号にマッピングし、
前記記号セットの各々をマッピングするのに応じて、前記第二アルファベットを設定する、
ようさらに作動し、前記第二アルファベットは前記マップ済み記号の各々を含む、請求項１又は２記載の装置。
【請求項４】
前記装置は、
前記第一正規表現セットを受信するための受信コンポーネントをさらに含み、
前記受信コンポーネントが前記第一正規表現セットを受信するのに応じて、前記解析コンポーネントは、前記第一正規表現セットを解析して前記第二アルファベットを設定するようさらに作動する、
請求項１乃至３のいずれかに記載の装置。
【請求項５】
前記第一状態マシンおよび前記第二状態マシンの少なくとも一つは決定性である、請求項１乃至４のいずれかに記載の装置。
【請求項６】
前記第一状態マシンおよび前記第二状態マシンの少なくとも一つは、少なくとも一つの無条件の最終状態を含み、前記装置は、
前記少なくとも一つの無条件の最終状態を評定するようさらに作動する、前記比較コンポーネントと、
前記少なくとも一つの無条件の最終状態がアクティブであるのに応じ、検証済み結果を提供するための、前記チェック・コンポーネントと、
をさらに含む、請求項１乃至５のいずれかに記載の装置。
【請求項７】
第一入力ストリングを第一正規表現セットにマッチングさせるための装置に適用される方法であって、前記第一正規表現セットは第一アルファベットからの記号を含み、前記方法は、
前記第一正規表現セットから第二アルファベットを設定するステップと、
前記第二アルファベットを設定するのに応じて、第二正規表現セットおよび第三正規表現セットを設定するステップであって、前記第二正規表現セットは前記第一アルファベットからの記号を含み、前記第三正規表現セットは前記第二アルファベットからの記号を含む、前記設定するステップと、
前記第二正規表現セットおよび前記第三正規表現セットを設定するのに応じて、前記第二正規表現セットを第一状態マシンにコンパイルし、前記第三正規表現セットを第二状態マシンにコンパイルするステップあって、前記第一状態マシンは少なくとも一つの第一条件付き最終状態を含み、前記第二状態マシンは少なくとも一つの第二条件付き最終状態を含み、各第一条件付き最終状態は少なくとも一つの第二条件付き最終状態に対応している、前記コンパイルするステップと、
前記ネットワークから前記第一入力ストリングを受信するステップであって、前記第一入力ストリングは前記第一アルファベットからの記号を含む、前記受信するステップと、
前記第一入力ストリングを受信するのに応じて、前記第一入力ストリングを第二入力ストリングに変換するステップであって、前記第二入力ストリングは前記第二アルファベットからの記号を含む、前記変換するステップと、
前記第一入力ストリングを変換するのに応じて、前記第一入力ストリングを前記第一状態マシン中に、前記第二入力ストリングを前記第二状態マシン中に、相並行して入力するステップと、
前記第一および第二入力ストリングを入力するのに応じ、前記第一条件付き最終状態を前記対応する第二条件付き最終状態と比較するステップと、
前記第一条件付き最終状態と前記対応する第二条件付き最終状態とがマッチングするのに応じて、検証済み結果を提供するステップと、
を含む、方法。
【請求項８】
コンピュータにより実行されることにより、前記コンピュータを請求項１乃至６のいずれかに記載の装置として機能させるコンピュータ・プログラム。
【請求項９】
第一入力ストリングを第一正規表現セットにマッチングするための装置であって、前記装置は、
プロセッサと、
コンピュータ・プログラムを格納するメモリと、
前記コンピュータ・プログラムを実行するよう構成されたプロセッサと、
を含み、前記コンピュータ・プログラムは、
前記第一正規表現セットの少なくとも２つの関係する記号を１つの一意的記号にマッピングするステップと、
前記第一入力ストリング中の前記少なくとも２つの関係する記号の各インスタンスを前記一意的記号で置き換えることによって第二入力ストリングを生成するステップと、
前記入力ストリング上の第一状態マシンおよび前記第二入力ストリング上の第二状態マシンを作動し、前記第一入力ストリングが前記第一正規表現セットとマッチするかどうかを判定するステップと、
を遂行するための命令を含む、装置。
【請求項１０】
前記第一状態マシンは少なくとも一つの第一条件付き最終状態を含み、前記第二状態マシンは少なくとも一つの第二条件付き最終状態を含み、各第一条件付き最終状態は少なくとも一つの第二条件付き最終状態に対応している、請求項９に記載の装置。
【請求項１１】
前記判定するステップにおいて、前記第一状態マシンがある条件付き最終状態にあり、かつ前記第二状態マシンが対応する条件付き最終状態にあることを条件に、前記マッチとして判定される、請求項１０に記載の装置。
【請求項１２】
前記第一状態マシンおよび前記第二状態マシンの少なくとも一つは、少なくとも一つの無条件の最終状態をさらに含む、請求項１１に記載の装置。
【請求項１３】
前記装置は、ネットワークに接続され、前記装置は前記ネットワークを介して前記第一入力ストリングを受信する、請求項９乃至１２のいずれかに記載の装置。
【請求項１４】
前記第一状態マシンおよび前記第二状態マシンの少なくとも一つは決定性である、請求項９乃至１３のいずれかに記載の装置。
【請求項１５】
前記第一入力ストリングおよび前記第二入力ストリングは、並行してそれぞれ前記第一状態マシンおよび第二状態マシンに入力される、請求項９乃至１４のいずれかに記載の装置。
【請求項１６】
前記第二状態マシンは、前記第一正規表現セット中の前記少なくとも２つの関係する記号の各インスタンスを前記一意的記号で置き換えることによって生成された第二表現セットから構築される、請求項９乃至１５のいずれかに記載の装置。
【請求項１７】
前記第一状態マシンは、前記第一表現セットの少なくとも一つの表現を書き換えて、前記少なくとも一つの表現の状態の複雑性を低減することによって生成された第三表現セットから構築される、請求項１６に記載の装置。
【請求項１８】
前記第一正規表現セットの正規表現が、閉包演算子、反復演算子、または任意演算子を含む場合、前記第一正規表現セットは、前記第一正規表現セットと等価であるが前記演算子を除去した前記第三正規表現セットで置き換えられる、請求項１７に記載の装置。
【請求項１９】
第一入力ストリングを第一正規表現セットにマッチングする装置に適用される方法であって、前記方法は、
前記装置によって、前記第一正規表現セット中に表現されたオーバーラップのない記号セットの最小セットを判定するステップと、
前記装置によって、前記オーバーラップのない記号セットを新規記号群にそれぞれマッピングするステップと、
前記装置によって、前記第一正規表現セットを書き換え、状態マシンの複雑性をもたらすコンポーネントを除去することにより、第二正規表現セットを生成するステップと、
前記装置によって、前記第一正規表現セットの表現中の記号セットを前記対応する新規記号群で置き換えることにより、第三正規表現セットを生成するステップと、
前記装置によって、前記第二正規表現セットから構築された第一状態マシンおよび前記第三正規表現セットから構築された第二状態マシンを用いて、前記第一入力ストリングが前記第一正規表現とマッチするかどうかを判定するステップと、
を含む方法。
【請求項２０】
前記オーバーラップのない記号セットの少なくとも一つは、少なくとも２つのアルファベット文字だけを含む、請求項１９に記載の方法。
【請求項２１】
前記オーバーラップのない記号セットの少なくとも一つは、少なくとも２つの数字だけを含む、請求項１９又は２０に記載の方法。
【請求項２２】
前記第一入力ストリングが前記第一正規表現とマッチするかどうかを前記判定するステップは、
前記第一入力ストリングの表現中の記号セットを前記対応する新規記号で置き換えることによって第二入力ストリングを生成するステップと、
前記第一入力ストリング上で前記第一状態マシンを作動するステップと、
前記第二入力ストリング上で前記第二状態マシンを作動するステップと、
前記第一状態マシンおよび前記第二状態マシンの出力に基づいてマッチを判定するステップと、
を含む、請求項１９乃至２１のいずれかに記載の方法。
【請求項２３】
前記マッチを判定するステップは、前記第一状態マシンにより出力された状態が最終状態で、かつ前記第二状態マシンにより出力された状態が対応する最終状態であることを条件に、マッチを表示するステップを含む、請求項２２に記載の方法。
【請求項２４】
前記マッチを判定するステップは、前記第一および第二状態マシンの一つにより出力された状態が初期状態であることを条件に、非マッチを表示する、請求項２２又は２３に記載の方法。
【請求項２５】
前記最終状態は条件付きかまたは無条件かのいずれかである、請求項２３に記載の方法。
【請求項２６】
コンピュータに第一入力ストリングを第一正規表現セットにマッチングさせるためのコンピュータ・プログラムであって、前記コンピュータ・プログラムは、
前記コンピュータに、
前記第一正規表現セットの少なくとも２つの関係する記号を１つの一意的記号にマップし、前記第一入力ストリング中の前記少なくとも２つの関係する記号の各インスタンスを前記一意的記号で置き換えることによって第二入力ストリングを生成させ、前記入力ストリング上の第一状態マシンおよび前記第二入力ストリング上の第二状態マシンを作動させ、前記第一入力ストリングが前記第一正規表現セットとマッチするかどうかを判定させるよう構成されたコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は正規表現の処理に関する。具体的には、本開示は入力ストリングを正規表現にマッチングさせるための装置および方法に関する。
【背景技術】
【０００２】
正規表現セットのマッチングは、ある正規表現に対しマッチングする、所与の入力ストリングのサブストリングの全ての存在を検索するために用いられる。キーワード・マッチングまたはキーワード・スキャニングとしても知られる厳密なセット・マッチングは、ウイルス・スキャニングおよび侵入検出など多くのアプリケーションに幅広く使われている。しかしながら、キーワード・ベースのアプローチでは静的キーワードの定義だけが可能である。
【０００３】
侵入検出ソフトウェアおよびウイルス・スキャナは、正規表現（ｒｅｇｅｘ：ｒｅｇｕｌａｒ  ｅｘｐｒｅｓｓｉｏｎ）を用いてより精度のある情報を捕捉し、ディープ・パケット・スキャニングを遂行することができる。正規表現は、マッチングする入力ストリングの検索に使われるパターンを定義する記号（例えば、文字符号、文字、および数字）のストリングである。正規表現および入力ストリングに使われる記号は、ｒｅｇｅｘのアルファベットとして知られる一組の記号から引用される。
【０００４】
ディープ・パケット・インスペクションは、インターネット・データ・マイニング、盗聴、および検閲はもとより、高度なセキュリティ機能を可能にする。ネットワーク速度の増大と、ウイルス、悪意あるソフトウェア（マルウエア）、およびネットワーク攻撃などのネットワーク脅威の増大との組み合わせに起因して、ディープ・パケット・インスペクションを遂行するアプリケーションを必要とする処理が増えている。正規表現を使って、パターンのファミリ群を表現することができる。入力データを正規表現のセットにマッチングさせるのは非常に複雑な作業となり得、正規表現中に実装されたフィーチャに大きく依存する。いくつかの異なるフォーマリズム技法が利用可能で、各々「簡略化構文（ｓｉｍｐｌｅｒ  ｓｙｎｔａｘ）」フィーチャにより構築され、それにさらなるフィーチャが加えられている。
【０００５】
いくつかのプログラム言語（例えば、ｐｅｒｌ）は、プログラマがテキスト解析を処理する際の作業を軽減するため、正規表現へのサポートを直接提供している。拡張文脈自由文法（すなわち、正規表現を使った文脈自由文法）を、高度なパーサ・ジェネレータ中に使用することができる。アンチウイルス・ソフトウェアは、正規表現を使ってファイルおよびデータ中のウイルスのシグネチャに対するスキャンをすることができる。ゲノム研究者らは、自己のデータ中のデオキシリボ核酸（ＤＮＡ：Ｄｅｏｘｙｒｉｂｏｎｕｃｌｅｉｃ  ａｃｉｄ）塩基のシーケンスおよびパターンをマッチさせる必要がある。非常に基本的なパターンは、キーワードを使って検索できるが、より高度なパターンは、より多様なパターンを表現可能な構成概念を必要とする。
【０００６】
一つのアプローチでは、表現のセットから決定性有限オートマトン（ＤＦＡ：Ｄｅｔｅｒｍｉｎｉｓｔｉｃ  Ｆｉｎｉｔｅ  Ａｕｔｏｍａｔｏｎ）または非決定性有限オートマトン（ＮＦＡ：Ｎｏｎ−Ｄｅｔｅｒｍｉｎｉｓｔｉｃ  Ｆｉｎｉｔｅ  Ａｕｔｏｍａｔｏｎ）を構築し、これらの有限オートマトン（有限状態オートマトン、または状態マシンとしても知られる）の実行をシミュレートして正規表現を処理する。ＤＦＡは、各状態および対応する入力に対して後続状態への遷移が一つだけある状態マシンである。これに対し、ＮＦＡは、各状態および対応する入力に対して可能な後続状態への遷移がいくつもある状態マシンである。
【０００７】
ＤＦＡおよびＮＦＡは、理論的には線形時間で実行が可能である。ＤＦＡアプローチにおける一つの主要な問題は、それが現在ある特定のパターンをマッチング中であることを記憶させる困難性にあり、完了状態の拡張を強いられ、しかして指数関数的なメモリ必要性が生じることである。ＤＦＡアプローチは、あらゆる可能なパターン・インスタンスに対するあらゆる可能な部分的マッチごとに別個の状態を用いなければならず、これにより指数関数的なメモリ必要性がもたらされる。別の主要な問題は、遷移または記号をカウントする困難性であり、あらゆる選択肢の完了に対する拡張を強いられ、これも指数関数的なメモリの必要性をもたらす。一部の従来技術は、追加メモリまたは履歴バッファと併せ、状態圧縮技法を用いている。ランタイムにおける検索処理は、それが状態を入力するたびにいくつかのオペレーションを遂行しなければならないことがある。すなわち、ＤＦＡが最終状態を入力したときに、ランタイムでマッチの検証のための試験を行わねばならないことがあり、この試験には単一命令多重データ（ＳＩＭＤ：Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ，Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）命令を使うことはできるが、クリティカル・パスにいくつかの命令が加えられる。ＳＩＭＤ命令は、同時入力の複数データに対し正確に同一のオペレーションを適用する、中央処理ユニット（ＣＰＵ：ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）の命令である。
【０００８】
ＮＦＡアプローチは、入力文字符号ごとに複数回の状態トラバースが必要となり得、従って実行が非常に遅くなる可能性があり、大量の履歴メモリが必要となり得る。さらに、ＮＦＡアプローチは非決定性で、後戻り法を使ってこれをシミュレートするための指数関数的時間と、各遷移の後のあらゆる可能な出力を符号化するための指数関数的スペースとを招き得る。
【０００９】
しかして、上記の従来式アプローチは、非常に簡単な正規表現または小さなｒｅｇｅｘセットに対するものを除いては実行可能でない。
【発明の概要】
【発明が解決しようとする課題】
【００１０】
これらの困難を克服しマッチングの速度を得るために、何人かの研究者が、各々異なった方向からこの問題にアプローチした。
問題に取り組むための技法の例には、
・  ＤＦＡまたはＮＦＡマッチング状態を圧縮するメカニズム、
・  ＤＦＡまたはＮＦＡをシミュレートする際にビット・レベルの並列処理を使うメカニズム、
・  簡略化フォーマリズムを使い状態の激増を制御するため、使用する演算子を減らすこと、
・  状態の激増を制御するためマッチのセマンティクスの修正（例えば、最短のストリングだけのマッチング、またはクリーネ閉包内の表現のマッチングは除外する）、
・  状態の激増を制御下に保つため、正規表現セットを異なるサブセットに区分化する（および複数の並列状態マシンを得る）こと、
・  より多くの情報をグラフ中に符号化しスペースの必要性を低減するためのＤＦＡフォーマリズムの修正（例えば、遅延入力のＤＦＡ）、
・  ＤＦＡを「高速部分」と「低速部分」に区分し、高速部分は正規表現の開始部をマッチさせ、最終的には低速部分を起動させるようにすること（二分パターン・マッチングとしても知られる）、
・  ＤＦＡにマッチ履歴を追加し、ＤＦＡエッジ上の状態履歴の使用を可能にすること（履歴ベースのＤＦＡ（Ｈ−ＦＡ：Ｈｉｓｔｏｒｙ  Ｂａｓｅｄ  ＤＦＡ））、および
・  履歴ベースのＤＦＡにカウンターを追加し、認識した記号の数に基づく状態履歴を可能にすること（履歴ベース・カウンティングＤＦＡ（Ｈ−ｃＦＡ：Ｈｉｓｔｏｒｙ  ｂａｓｅｄ  Ｃｏｕｎｔｉｎｇ  ＤＦＡ））、
がある。
【００１１】
上記のとおり、前述の問題を解決することが当該技術分野で求められている。
【課題を解決するための手段】
【００１２】
第一態様から見ると、本発明は、請求項１による、データ処理システムにおいて第一入力ストリングを第一正規表現セットにマッチングするための装置を提供する。
【００１３】
望ましくは、本発明は、チェック・コンポーネントが複数の検証済み結果を提供するのに応じて、複数の検証済み結果を検証し、完全検証されたマッチを提供するための出力コンポーネントをさらに含む装置を提供する。
【００１４】
望ましくは、本発明は、第一アルファベットが複数の記号セットを含み、解析コンポーネントが、記号セットの各々を一つ以上のマップ済み記号にマッピングし、記号セットの各々をマッピングするのに応じて第二アルファベットを設定するようさらに作動し、第二アルファベットはマップ済み記号の各々を含む、装置を提供する。
【００１５】
望ましくは、本発明は装置を提供し、該装置は、第一正規表現セットを受信するための受信コンポーネントをさらに含み、受信コンポーネントが第一正規表現セットを受信するのに応じ、解析コンポーネントは第一正規表現セットを解析し第二アルファベットを設定するようさらに作動する。
【００１６】
望ましくは、本発明は、第一状態マシンおよび第二状態マシンの少なくとも一つが決定性である装置を提供する。
【００１７】
望ましくは、本発明は、第一状態マシンおよび第二状態マシンの少なくとも一つが少なくとも一つの無条件の最終状態をさらに含む装置を提供し、該装置は、該少なくとも一つの無条件の最終状態を評定するようさらに作動する比較コンポーネントと、該少なくとも一つの無条件の最終状態がアクティブであるのに応じて、検証済み結果を提供するためのチェック・コンポーネントと、をさらに含む。
【００１８】
さらなる態様から見ると、本発明は、請求項７による、データ処理システムにおいて第一入力ストリングを第一正規表現セットにマッチングさせる方法を提供する。
【００１９】
望ましくは、本発明は方法を提供し、該方法は、複数の検証済み結果を提供するのに応じて、該複数の検証済み結果を検証して完全検証されたマッチを提供するステップをさらに含む。
【００２０】
望ましくは、本発明は、第一アルファベットが複数の記号セットを含む方法を提供し、該方法は、記号セットの各々を一つ以上のマップ済み記号にマッピングするステップと、記号セットの各々をマッピングするのに応じて第二アルファベットを設定するステップとをさらに含み、第二アルファベットはマップ済み記号の各々を含む。
【００２１】
望ましくは、本発明は方法を提供し、該方法は、第一正規表現セットを受信するステップと、第一正規表現セットを受信するのに応じて第一正規表現セットを解析し第二アルファベットを設定するステップとをさらに含む。
【００２２】
望ましくは、本発明は、第一状態マシンおよび第二状態マシンの少なくとも一つが決定性である方法を提供する。
【００２３】
望ましくは、本発明は、第一状態マシンおよび第二状態マシンの少なくとも一つが少なくとも一つの無条件の最終状態をさらに含む方法を提供し、該方法は、該少なくとも一つの無条件の最終状態を評定するステップと、少なくとも一つの無条件の最終状態がアクティブであるのに応じて、検証済み結果を提供するステップとをさらに含む。
【００２４】
さらなる態様から見ると、本発明は、データ処理システムにおいて第一入力ストリングを第一正規表現セットにマッチングするためのコンピュータ・プログラム製品を提供し、第一正規表現セットは第一アルファベットからの記号を含み、データ処理システムはネットワークを含み、コンピュータ・プログラム製品は、処理回路に可読で、該処理回路が本発明のステップを履行する方法を実施するため実行する命令を格納する、コンピュータ可読記憶媒体を含む。
【００２５】
さらなる態様から見ると、本発明は、コンピュータ可読媒体に格納され、デジタル・コンピュータの内部メモリにロード可能なコンピュータ・プログラムであって、前記プログラムがコンピュータ上で実行されたとき本発明のステップを遂行するためのソフトウェア・コード部分を含む、コンピュータ・プログラムを提供する。
【００２６】
さらなる態様から見ると、本発明は、第一入力ストリングを第一正規表現セットにマッチングするための装置を提供する。データ処理システムは、プロセッサと、コンピュータ・プログラムを格納するメモリと、該コンピュータ・プログラムを実行するよう構成されたプロセッサとを含む。該コンピュータ・プログラムは、第一正規表現セットの少なくとも２つの関係する記号を１つの一意的記号にマッピングするステップと、第一入力ストリング中の少なくとも２つの関係する記号の各インスタンスを１つの一意的記号で代替することによって第二入力ストリングを生成するステップと、入力ストリング上の第一状態マシンおよび第二入力ストリング上の第二状態マシンを作動し、第一入力ストリングが第一正規表現セットにマッチするかどうかを判定するステップと、を遂行するための命令を含む。
【００２７】
第一状態マシンは少なくとも一つの第一条件付き最終状態を含み得、第二状態マシンは少なくとも一つの第二条件付き最終状態を含み得て、各第一条件付き最終状態は少なくとも一つの第二最終状態に対応し得る。第一状態マシンがある条件付き最終状態であり、第二状態マシンが対応する条件付き最終状態であるとき、マッチを判定することができる。第一状態マシンおよび第二状態マシンの少なくとも一つは、少なくとも一つの無条件の最終状態をさらに含み得る。
【００２８】
上記装置には、ネットワークをさらに含めることができ、データ処理システムはネットワークを介して第一入力ストリングを受信する。第一状態マシンおよび第二状態マシンの少なくとも一つは決定性とすることができる。第一入力ストリングおよび第二入力ストリングは、それぞれ、第一状態マシンおよび第二状態マシンに並行して入力することができる。
【００２９】
第二状態マシンは、第一正規表現セット中の少なくとも２つの関係する記号の各インスタンスを一意的記号で代替することによって生成された第二表現セットから構築することができる。第一状態マシンは、第一表現セットの少なくとも一つの表現を書き換えて該少なくとも一つの表現の状態の数を減らすことによって生成された、第三表現から構築することができる。第一正規表現セット中のある正規表現が、閉包演算子、反復演算子、または任意演算子を含む場合、第一正規表現セットは、第一正規表現セットと等価であるがこれら演算子を除いた第三正規表現セットで置き換えることができる。
【００３０】
さらなる態様から見ると、本発明は、本発明の例示的な実施形態による、データ処理システムにおいて第一入力ストリングを第一正規表現セットにマッチングする方法を提供し、該方法は、第一正規表現セット中に表現されたオーバーラップのない記号セットの最小のセットを判定するステップと、該オーバーラップのない記号セットをそれぞれ新しい記号群にマッピングするステップと、第一正規表現セットを書き換え、状態マシンの複雑性の原因となるコンポーネントを除去することによって第二正規表現セットを生成するステップと、第一正規表現の表現中の記号セットを対応する新規記号で置き換えることによって第三正規表現セットを生成するステップと、第二正規表現セットから構築された第一状態マシンおよび第三正規表現セットから構築された第二状態マシンを使って、第一入力ストリングが第一正規表現とマッチするかどうかを判定するステップと、を含む。
【００３１】
最終状態は、条件付きまたは無条件のいずれかであり得る。オーバーラップのない記号セットの少なくとも一つは、少なくとも２つのアルファベット文字だけを含み得、またはオーバーラップのない記号セットの少なくとも一つは、少なくとも２つの数字だけを含見得る。第一入力ストリングは、ネットワークを介しデータ処理システムによって受信することができる。第一状態マシンおよび第二状態マシンの少なくとも一つは決定性とすることができる。第一入力ストリングおよび第二入力ストリングは、それぞれ並行して第一状態マシンおよび第二状態マシンに入力することができる。
【００３２】
第一入力ストリングが第一正規表現にマッチするかどうかを判定するステップには、第一入力ストリングの表現中の記号セットを対応する新規記号で置き換えて第二入力ストリングを生成するステップと、第一入力ストリング上の第一状態マシンを作動するステップと、第二入力ストリング上の第二状態マシンを作動するステップと、第一状態マシンおよび第二状態マシンの出力に基づいてマッチを判定するステップと、を含めることができる。
【００３３】
マッチを判定するステップには、第一状態マシンにより出力された状態が最終状態であり、第二状態マシンにより出力された状態が対応する最終状態であるとき、マッチを表示するステップを含めることができる。マッチを判定するステップには、第一または第二状態マシンにより出力された状態が初期状態であるとき、非マッチを判定するステップを含めることができる。
【００３４】
単なる例示として、添付の図面に図示された好適な実施形態を参照しながら、以降に本発明を説明する。
【図面の簡単な説明】
【００３５】
【図１】従来技術によるデータ処理システムを表すブロック図であり、このシステムに本発明の好適な実施形態を実装することができる。
【図２】従来技術による状態マシン・システムを表すブロック図である。
【図３】本発明の好適な実施形態による、入力ストリングを正規表現にマッチングさせるため遂行される、装置のオペレーション方法のステップを表す、ハイレベルの例示的な概略流れ図である。
【図４】本発明の好適な実施形態の実装が可能な装置を表すブロック図である。
【図５】装置の変換コンポーネントを表すブロック図である。
【図６】装置の検索コンポーネントを表すブロック図である。
【図７】本発明の好適な実施形態による、例示的な状態マシンのブロック図である。
【図８】本発明の実施形態による方法およびシステムを実装できるコンピュータ・システムの例を示す。
【発明を実施するための形態】
【００３６】
本明細書で説明するシステムおよび方法は、さまざまな形態のハードウェア、ソフトウェア、ファームウェア、特殊用途処理装置、またはこれらの組み合わせに実装可能なことを理解すべきである。具体的には、望ましくは、本発明の少なくとも一部は、一つ以上のコンピュータ可読媒体（すなわち、ハード・ディスク、磁気フレキシブル・ディスク、ＲＡＭ、ＲＯＭ、ＣＤ−ＲＯＭなど、プロセッサ、メモリ、および入力／出力インタフェースを有する汎用デジタル・コンピュータなどの適切なアーキテクチャを含む任意のデバイスまたはマシンによって実行可能なプログラム記憶デバイス）に有形に具現されたプログラム命令を含むアプリケーションとして実装される。添付の図面に示されたシステム構成コンポーネントおよびプロセス・ステップの一部は、望ましくはソフトウェアに実装されるので、システム・モジュール（または方法ステップのロジック・フロー）間の接続が、本発明をプログラムする仕方の如何によっては異なり得ることもさらに理解すべきである。本明細書の教示を受けて、当業者は、本発明のこれらのまたは類似の実装を考案することができよう。
【００３７】
当業者ならよく理解するであろうように、本発明の態様は、システム、方法、またはコンピュータ・プログラム製品として具現することができる。従って、本発明の態様は、全体がハードウェアの実施形態、全体がソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコードなどを含む）、あるいは、本明細書では全て概して「回路」、「モジュール」、または「システム」といわれることもある、ソフトウェアおよびハードウェア態様を組み合わせた実施形態の形を取ることができる。さらに、本発明の態様は、内部に具体化されたコンピュータ可読プログラム・コードを有する一つ以上のコンピュータ可読媒体（群）中に具現されたコンピュータ・プログラム製品の形を取ることもできる。
【００３８】
一つ以上のコンピュータ可読媒体（群）の任意の組み合わせを用いることができる。コンピュータ可読媒体はコンピュータ可読記憶媒体とすることができる。コンピュータ可読記憶媒体は、例えば、以下に限らないが、電子的、磁気的、光学的、電磁気的、赤外的な、または半導体の、システム、装置、もしくはデバイス、あるいはこれらの任意の適切な組み合わせとすることができる。コンピュータ可読記憶媒体のさらに具体的な例（非包括的リスト）には、一つ以上の配線を有する電気接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ：ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、読み取り専用メモリ（ＲＯＭ：ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、消去可能プログラム可能読み取り専用メモリ（ＥＰＲＯＭ（ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）またはフラッシュ・メモリ）、光ファイバ、ポータブル・コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ：ｃｏｍｐａｃｔ  ｄｉｓｃ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、光記憶デバイス、磁気記憶デバイス、またはこれらの任意の適切な組み合わせが含まれよう。本文書の文脈において、コンピュータ可読記憶媒体は、命令実行システム、装置、またはデバイスによってまたはこれらに関連させて使用するためのプログラムを、包含または格納できる任意の有形媒体とすることができる。コンピュータ可読媒体中に具現されたプログラム・コードは、以下に限らないが、無線、有線、光ファイバ・ケーブル、ＲＦなど、またはこれらの任意の適した組み合わせを含め、任意の適切な媒体を用いて送信することができる。
【００３９】
本発明の態様のオペレーションを実行するためのコンピュータ・プログラム・コードは、Ｊａｖａ（Ｒ）、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語、および、“Ｃ”プログラミング言語または類似のプログラミング言語などの従来式手続き型プログラミング言語を含め、一つ以上のプログラミング言語の任意の組み合せで記述することができる。このプログラム・コードは、スタンドアロン・ソフトウェア・パッケージとして、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で実行することも、部分的にユーザのコンピュータ上で且つ部分的に遠隔コンピュータ上で実行することも、または完全に遠隔コンピュータまたはサーバ上で実行することもできる。後者のシナリオでは、ローカル・エリア・ネットワーク（ＬＡＮ：ｌｏｃａｌ  ａｒｅａ  ｎｅｔｗｏｒｋ）または広域ネットワーク（ＷＡＮ：ｗｉｄｅａｒｅａ ｎｅｔｗｏｒｋ）を含む任意の種類のネットワークを介して、遠隔コンピュータをユーザのコンピュータに接続することができ、あるいは（例えばインターネット・サービス・プロバイダを使いインターネットを介し）外部のコンピュータへの接続を行うことができる。
【００４０】
本発明の実施形態による方法、装置（システム）およびコンピュータ・プログラム製品のフローチャート図もしくはブロック図またはその両方を参照しながら、本発明の態様を以下に説明する。フローチャート図もしくはブロック図またはその両方の各ブロック、および、フローチャート図もしくはブロック図またはその両方中のブロックの組み合せは、コンピュータ・プログラム命令によって実行可能であることが理解されよう。これらのコンピュータ・プログラム命令を、汎用コンピュータ、特殊用途コンピュータ、またはマシンを形成する他のプログラム可能データ処理装置のプロセッサに供給し、この命令がコンピュータまたは他のプログラム可能データ処理装置のプロセッサにより実行されて、フローチャートもしくはブロック図またはその両方のブロックまたはブロック群中に規定された機能群／処理群を実施するための手段を生成するようにすることができる。
【００４１】
また、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスに対し特定の形で機能するよう命令できるこれらのコンピュータ・プログラム命令は、コンピュータ可読媒体に格納され、そのコンピュータ可読媒体に格納された命令が、フローチャートもしくはブロック図またはその両方のブロックまたはブロック群中に規定された機能／処理を実施する命令群を包含する製造品を形成するようにすることができる。
【００４２】
さらに、コンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスにロードして、これらコンピュータ、他のプログラム可能装置、または他のデバイス上で一連のオペレーション・ステップを実行させてコンピュータに実装されるプロセスを生成し、これらコンピュータまたは他のプログラム可能装置で実行されるこれらの命令が、フローチャートもしくはブロック図またはその両方のブロックまたはブロック群中に規定された機能群／処理群を実装するためのプロセスを提供するようにすることもできる。
【００４３】
図中のフローチャートおよびブロック図は、本発明のさまざまな実施形態による、システム、方法、およびコンピュータ・プログラム製品の考えられる実装のアーキテクチャ、機能、およびオペレーションを例示している。この点に関し、フローチャートまたはブロック図中の各ブロックは、所定の論理機能（群）を実装するための一つ以上の実行可能命令を含む、モジュール、セグメント、またはコードの部分を表し得る。また、一部の別の実装においては、ブロック中に記載された機能が、図に記載された順序を外れて行われることがあり得ることにも留意すべきである。例えば、連続して示された２つのブロックが、実際にはほぼ同時に実行されることがあり、関与する機能によっては、時には、これらブロックが逆の順序で実行されることもあり得る。さらに、ブロック図もしくはフローチャート図またはその両方の各ブロック、およびブロック図もしくはフローチャート図またはその両方中のブロックの組み合わせは、特定の機能または処理を実施する、特殊用途のハードウェア・ベースのシステム、または特殊用途のハードウェアとコンピュータ命令との組み合わせによって実装可能なことにも留意すべきである。
【００４４】
図１は、本発明の例示的な実施形態が実装可能なデータ処理システム１００を表すブロック図である。データ処理システム１００の一例はインターネットである。クライアント・アプリケーション１３０はデータ処理システム１００上で動作可能であり、該システムは、ワークステーション１２０、サーバ１５０および１５２を含む。ワークステーション１２０とこれらサーバとはネットワーク１１４を介して接続可能であり、このネットワークには有線ネットワーク１１０を含めることができる。サーバ１５２はネーム・サーバ１５２とすることができ、これもネットワーク１１４に接続可能である。ネーム・サーバ１５２は、統一資源位置指定子（ＵＲＬ：ｕｎｉｆｏｒｍ  ｒｅｓｏｕｒｃｅ  ｌｏｃａｔｏｒ）をインターネット・プロトコル（ＩＰ：Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）アドレスに変換する。
【００４５】
クライアント・アプリケーション１３０は、サーバ１５０で動作可能なサーバ・アプリケーション１６０からメッセージ１４０（例、ｅメール）を受信する。メッセージ１４０は、シグネチャとなるストリングを含むウイルスを包含することがある。クライアント・アプリケーション１３０は、メッセージ１４０を解析し、メッセージ１４０のストリングを既知のウイルス・シグネチャと比較する。この比較は、ストリングを、シグネチャを表す正規表現（ｒｅｇｅｘ）にマッチングさせることによって行うことができる。
【００４６】
図２は、例示的な状態マシン・システム２００を表すブロック図である。状態マシン２２０は、正規表現（ｒｅｇｅｘ）「Ａ［ａ−ｚ］Ｃ」を表現する。このｒｅｇｅｘは文字「Ａ」、その後に任意の小文字「ａ」−「ｚ」、それに続く文字「Ｃ」を表す。状態マシン・システム２００は、（例えば、ネットワーク１１４を介して受信した）入力ストリング２０５をこのｒｅｇｅｘと比較する。入力ストリング２０５は、状態マシン・システム２００の入力コンポーネント２１０に、１記号ずつ入力される。状態マシン２２０は、４つの状態、すなわち、初期状態Ｓ−ＩＮＩＴ−１、第二状態Ｓ−Ａ、第三状態Ｓ−ｂ、および第四状態Ｓ−ＦＩＮＡＬを含む。状態マシン２２０は、どの文字でも受け入れる。
【００４７】
最初は、状態マシン２２０は状態Ｓ−ＩＮＩＴ−１にある。状態マシン２２０が状態Ｓ−ＩＮＴＩ−１にあるとき、次の入力が「Ａ」なら状態は状態Ｓ−Ａに移行するが、次の入力が「Ａ」以外であれば状態は状態Ｓ−ＩＮＴＩ−１のままである。状態Ｓ−Ａにおいて、次の入力が小文字なら状態は状態Ｓ−ｂに移行するが、次の入力が小文字以外であれば状態は状態Ｓ−ＩＮＴＩ−１に逆行する。状態Ｓ−ｂにおいて、次の入力が「Ｃ」なら状態は状態Ｓ−ＦＩＮＡＬに移行するが、次の入力が「Ｃ」以外であれば状態は状態Ｓ−ＩＮＴＩ−１に逆行する。状態の間の標識された矢印線は、標識に示された入力文字符号に対する状態間の遷移を表す。状態Ｓ−ＩＮＩＴ−１への逆行する遷移は「不一致」と定義される。
【００４８】
出力コンポーネント２３０は、状態マシン２２０が最終状態Ｓ−ＦＩＮＡＬにあるかどうかをチェックする。例えば、「ＡｂＣ」の入力ストリング２０５が状態マシン２２０に入力された後では、状態マシンは状態Ｓ−ＦＩＮＡＬになることになる。しかして、出力コンポーネント２３０は、「一致」結果２３５を出力して、マッチがあることを示す。また一方、「ＸＹＺ」の入力ストリング２０５が状態マシン２２０に入力された後では、状態マシンはＳ−ＩＮＩＴ−１状態になることになる。しかして、出力コンポーネント２３０は「不一致」結果２３５を出力して、マッチがなかったことを示す。
【００４９】
別の例では、アルファベットに一桁の数字を入れて拡張されることもあろう。より複雑な正規表現は、任意のマッチング・ストリングを表すための閉包演算子を含む。例えば「＊」の閉包演算子は、存在ゼロを最小として、先行する変数の任意の数の存在を表す。従って、「ＡＣ」、「ＡｂＣ」「ＡｂｂＣ」の入力ストリング２０５は、全てｒｅｇｅｘ「Ａ［ａ−ｚ］＊Ｃ」にマッチする。プラスの閉包演算子「＋」は、存在１を最小として、先行する変数の任意の数の存在を表す。従って、「ＡｂＣ」「ＡｂｂＣ」の入力ストリング２０５は、全てｒｅｇｅｘ「Ａ［ａ−ｚ］＋Ｃ」にマッチするが、「ＡＣ」の入力ストリング２０５はマッチしない。しかしながら、［ａ−ｚ］の文字セットは、特に「＊」などの演算子が伴う場合、対応する状態マシンの複雑性を増大する。また、ｒｅｇｅｘにはキーワードおよびアンカー演算子を含めることができる。キーワードは、例えば、「ｐｒｉｎｔ」など、プログラミング言語に対し、全体としての意味を有する。
【００５０】
複数の正規表現は、正規表現のセットに組み合わせ、入力ストリングがそのセットを構成する正規表現のいずれにもマッチ可能になるようにできる。正規表現群には、ある範囲またはある限定された範囲の相異なる文字符号セットを含めことができる。例えば、テキストを解析するための表現には、通常、数字、小文字、大文字、句読記号などのセット、およびこれらのセットの組み合わせが使われる。
【００５１】
図３を、図４、図５、図６、およびと図７と併せて以下に説明する。図３は、本発明の例示的な実施形態による、入力ストリング４４０を正規表現セット４０５にマッチングさせるため遂行されるオペレーションの方法ステップを表す、例示的なハイレベルでの流れ図３００である。この方法ステップは、装置４０８によって遂行することができる。入力ストリング４４０は、ネットワーク１１４を介し受信でき、またはローカル・メモリなどからロードすることができる。図４は、本発明の例示的な実施形態による装置４０８を表すブロック図４００である。図５は、本発明の例示的な実施形態による、装置４０８の変換コンポーネント４１０を表すブロック図５００である。図６は、本発明の例示的な実施形態による、装置４０８の検索コンポーネント４５０を表すブロック図６００である。図７は、本発明の例示的な実施形態による状態マシンのブロック図７００である。
【００５２】
図３は、論理フローチャート図として説明する。しかして、示された順序および表示されたステップは、本発明の方法の少なくとも一つの例示的な実施形態を表している。しかしながら、図解された方法の一つ以上のステップまたはその部分の機能、ロジックまたは効果と同等な、他のステップおよび方法を考案することもできる。さらに、用いられているフォーマットおよび記号は、本方法の論理的ステップを説明するため提示にされたものであり、本方法の範囲を限定するものでないことが理解される。
【００５３】
以下の例を用いて本発明の例示的な実施形態を説明する。この例において、初期正規表現セット４０５は、「Ａｌｐｈａ［Ａ−Ｚ］＊ｂｅｔａ」の第一正規表現初期ストリング＿１、および「ＧＡＭＭＡ［０−９Ａ−Ｚ］＋ｄｅｌｔａ」の第二正規表現初期ストリング＿２を含む。初期正規表現セット４０５は、第一アルファベットからの記号を含む。例えば、第一アルファベットは、小文字「ａ」〜「ｚ」、大文字「Ａ」〜「Ｚ」、および数字「０」〜「９」を含み得る。この例をさらに説明すると、２つの他の入力ストリング４４０を想定し、これは「ＧＡＭＭＡ２ｄｅｌＴＡ」の第一初期ストリング＿１と、「ＳＡＬＶＥ７ｄｅｌＴＡ」の第二初期ストリング＿２とを含む。
【００５４】
本方法はステップ３０１から開始される。ステップ３０５で、変換コンポーネント４１０の受信コンポーネント５０６が初期正規表現セット４０５を受信する。ステップ３１６で、解析コンポーネント５１５は、初期正規表現セット４０５中に使われている第一アルファベットの記号（例えば、「Ａ」、「９」、「ｅ」など）を調べ、初期正規表現セット４０５を解析して、初期正規表現セット４０５中に表現されているオーバーラップのない記号セットの最小セットを判定する。例えば、初期正規表現セット４０５中の全ての使用記号セットを分解し、各記号セットを他のあらゆる記号セットと交差させて、全ての可能な入力記号を表わせるオーバーラップのない記号セットを判定することによって解析が行われる。この例では、必要なオーバーラップのない記号セットは「ａ−ｚ」、「Ａ−Ｚ」および「０−９」として識別される。
【００５５】
次いで、このオーバーラップのない記号セットは、３つの新しい記号［例、α、β、およびγ］にマップされ、「Ａ−Ｚ」がαにマップされ、「ａ−ｚ」がβにマップされ、「０−９」がγにマップされる。記号セット・アルファベット「アルファベット＿２」４１８が定義され、これは第一アルファベットの使用された記号セットを表す新規記号を含む。
【００５６】
ステップ３１８で、更新コンポーネント５１６が、初期正規表現セット４０５を２つの等価な正規表現、ＲＥＧＥＸ＿２  ５１７およびＲＥＧＥＸ＿３  ５１８として書き換える。表現セットＲＥＧＥＸ＿２  ５１７は、状態マシンの複雑性を生成するコンポーネント（例えば、閉包演算子「＊」および「＋」、任意演算子「？」、および反復演算子「｛ｎ；ｍ｝」）が除去された、第一アルファベットの記号を使った初期正規表現セット４０５を含む。任意演算子「？」は、サブ表現が任意であることを示し、反復演算子「｛ｎ；ｍ｝」は、サブ表現が最少「ｎ」回、最多「ｍ」回存在しなければならないことを規定する。どちらの数字も省略することができ、この場合「ｎ」も「ｍ」も制限のない状態にデフォルトされる。
【００５７】
従って、表現セットＲＥＧＥＸ＿２は、「Ａｌｐｈａ」の第一正規表現、「ｂｅｔａ」の第二正規表現、「ＧＡＭＭＡ［０−９Ａ−Ｚ］の第三正規表現、および「ｄｅｌＴＡ」の第四正規表現となる。表現セットＲＥＧＥＸ＿２  ５１７は、マッチの対象の入力ストリング４４０の細部を表すキーワード、アンカー、および簡単な正規表現だけを含む。
【００５８】
表現セットＲＥＧＥＸ＿３  ５１８は、アルファベット＿２  ４１８を使って書き換えられた初期正規表現セット４０５を含む。表現セットＲＥＧＥＸ＿３は、アルファベット＿２  ４１８によって定義されており、元の表現の全体的構造を表している、より長い、しかしそれでも簡単な表現を含む。アルファベット＿２  ４１８のサイズは非常に小さい。というのは、実際上の正規表現セットは、通常、多い少ないはあるが大文字、小文字、数字、句読記号など文字符号の同じ組み合わせを用いるからである。従って、表現セットＲＥＧＥＸ＿３  ５１８は、「αββββα＊ββββ」の第一正規表現、および「ααααα［γα］＋βββαα」の第二正規表現となる。
【００５９】
ステップ３２０で、第一ＤＦＡコンパイラ５２０（ＤＦＡ＿１という）は、表現セットＲＥＧＥＸ＿２  ５１７をコンパイルして、第一状態マシン６５５（ＤＦＡ１という）を生成する。第一状態マシンＤＦＡ１は、簡単な正規表現およびキーワードに対してだけ作動することができる。第二ＤＦＡコンパイラ５２５（ＤＦＡ＿２という）は、表現セットＲＥＧＥＸ＿３  ５１８をコンパイルして、第二状態マシン６６０（ＤＦＡ２という）を生成する。第二状態マシンＤＦＡ２は、アルファベット＿２  ４１８に対してだけ作動することができる。入力ストリング４４０が正規表現セット４０５とマッチするためには、入力ストリング４４０は、正規表現セット４０５の全体的構造はもとより、そのキーワード、アンカー、および簡単な正規表現がマッチしなければならない。従って、第一状態マシンＤＦＡ１  ６５５の中の状態は、個別の表現の細部を、それらが初期正規表現４０５の文脈内に現れる場合にだけ認識するような仕方で、第二状態マシンＤＦＡ２  ６６０の中の状態と相関する。
【００６０】
図７は、例示的な、相関している第一および第二状態マシンＤＦＡ１  ６５５およびＤＦＡ２  ６６０を表す。状態Ｓ１はＤＦＡ１  ６５５の初期状態を表す。状態Ｓ２２はＤＦＡ２  ６６０の初期状態を表す。ＤＦＡ１  ６５５の中の状態Ｆ５、Ｆ１０、Ｆ１５、およびＦ２１は、第一条件付き最終状態を表す。ＤＦＡ２  ６６０の中の状態Ｆ２８、Ｆ３３、Ｆ３９、Ｆ４３、Ｆ４７、Ｆ５１、およびＦ５７は、第二条件付き最終状態を表す。ＤＦＡ１  ６５５中の第一条件付き最終状態は、ＤＦＡ２  ６６０中の一つ以上の第二条件付き最終状態と相関している。例えば、第一条件付き最終状態Ｆ５は、第二条件付き最終状態Ｆ４７、Ｆ５１、およびＦ５７と相関している。簡明化のため、初期状態と条件付き最終状態だけに番号を付してある。同様に簡明化のため、不一致の遷移を、１つだけ状態１６と状態Ｓ１との間に示している。
【００６１】
条件付き最終状態は、状態のファイナリティが関連する状態マシン中のそれに対応するファイナリティに条件付けられているので「条件付き」といわれる。条件付き最終状態だけが、２つの状態マシンＤＦＡ１  ６５５、ＤＦＡ２  ６６０に亘って相関付けられる。条件付き最終状態と対照的に、２つの状態マシンにおける無条件の最終状態の間に関係はない。図７には、無条件の最終状態は一切示されていない。
【００６２】
ステップ３３０において、検索コンポーネント４５０の入力コンポーネント６３４は、（例えば、ネットワーク１１４から）初期ストリング４４０を受信する。ステップ３３２で、変換コンポーネント６３５は、アルファベット＿２  ４１８を使って、初期ストリング４４０を第二ストリング「ｓｔｒｉｎｇ＿２」６５２に変換する。例えば、「ＧＡＭＭＡ２ｄｅｌＴＡ」の第一初期入力ストリング４４０は、「αααααγβββαα」に変換され、「ＳＡＬＶＥ７ｄｅｌＴＡ」の第二初期入力ストリング４４０も「αααααγβββαα」に変換される。
【００６３】
ステップ３３４で、ストリング＿２  ６５２が、入力＿２コンポーネント６５０を介して状態マシンＤＦＡ２  ６６０に入力されるのと並行して、初期ストリング４４０が、入力１コンポーネント６４５を介して状態マシンＤＦＡ１  ６５５に入力される。初期ストリング４４０およびストリング＿２  ６５２は、１記号ずつ全記号が入力されるまで入力される。マッチングに達した一切の条件付き最終状態は、チェック・コンポーネント６６５によって検証されてから記録される。
【００６４】
ステップ３３６で、検証された結果および到達した一切の他の最終状態（例えば、少なくとも別の実施形態において、状態マシンは無条件の最終状態を含み得よう）は、チェック・コンポーネント６６５によって、チェックされ照合される。結果は、出力コンポーネント４６５によって出力される。
【００６５】
初期ストリング＿１  ４４０の例を用いれば、「ＧＡＭＭＡ２ｄｅｌＴＡ」４４０および「αααααγβββαα」６５２の記号は、それぞれ並行してＤＦＡ１  ６５５とＤＦＡ２  ６６０とに１記号ずつ入力される。「ＧＡＭＭＡ２」および「αααααγ」の記号が入力された後、それぞれ条件付き最終状態Ｆ２１およびＦ２８に到達し、検証された結果がもたらされ、最終チェック・コンポーネント６６５によってそれが記録される。引き続き、「ｄｅｌＴＡ」および「βββαα」の記号が入力された後、条件付き最終状態Ｆ１５およびＦ３３に到達する。Ｆ２１とＦ２８との相関、およびＦ５１とＦ３３との相関の両方が取れたので、出力コンポーネント４６５によって「一致」結果が出力される。
【００６６】
また一方、初期ストリング＿２  ４４０の例を用いれば、「ＳＡＬＶＥ７ｄｅｌＴＡ」４４０および「αααααγβββαα」６５２の記号は、それぞれ並行してＤＦＡ１  ６５５とＤＦＡ２  ６６０とに１記号ずつ入力される。「ＳＡＬＶＥ７」および「αααααγ」の記号が入力された後、それぞれ最終状態Ｓ１およびＦ２８に達する。例えば、「ＳＡＬＶＥ７」の「Ｓ」は、状態Ｓ１後の第一状態のいずれにも対応しない。Ｓ１とＦ２８とは相関する状態でなく、従って、最終チェック・コンポーネント６６５によって検証された結果は記録されない。引き続き、「ｄｅｌＴＡ」および「βββαα」の記号が入力された後、条件付き最終状態Ｆ１５およびＦ３３に達する。Ｆ１５とＦ３３とは互いに相関するが、他方の検証済み結果が記録されていなかったので、従い、出力コンポーネント４６５によって「不一致」結果が出力される。ステップ３４５で、最終結果が出力コンポーネント４６５によって出力される。本方法はステップ３９９で終了する。
【００６７】
少なくとも一つの例示的実施形態において、状態マシン６６０および６５５は決定性有限状態オートマトン（ＤＦＡ）である。少なくとも一つの別の例示的実施形態において、状態マシン６６０および６５５は非決定性有限状態オートマトン（ＮＦＡ）、またはＤＦＡとＮＦＡとの組み合わせである。
【００６８】
少なくとも一つの例示的実施形態において、任意のＤＦＡ実装を、前述の分解方策のための下支えとして用いることができる。例えば、キーワード・グラフ決定性オートマトン、ハードウェアＢＦＳＭ実装、あるいは従来式のＤＦＡであっても使用が可能である。
【００６９】
本発明の少なくとも一つの例示的な実施形態において、初期正規表現セット４０５は、第一アルファベットとさらなる複数のアルファベット＿２  ４１８とを含む、２より多い状態マシン６６０、６５５に分解される。初期ストリング４４０は、アルファベット＿２群４１８を使って変換されストリング＿２群６５２が設けられた後、２より多い状態マシン６６０および６５５によって処理される。
【００７０】
別の例示的な実施形態において、初期正規表現セット４０５は、全体として解釈されるキーワードを含む。このキーワードは、文字符号の記号で構成されるものでなく、かかるキーワードは、記号マッピングを使って第二状態マシンに変換できないので、第一状態マシンＤＦＡ１  ６５５に出現する。また一方、「［０−９］［０−９］［０−９］」など文字符号の記号だけで形成されているキーワードは、かかるキーワードは、そのキーワードがマップされた記号セットを用いて変換されてしまえば非常にコンパクトな形で表すことができるので、第二状態マシンＤＦＡ２  ６００に出現する。反面、第一状態マシンＤＦＡ１  ６５５中への、文字符号の記号だけで形成されているキーワードの包含は、第一状態マシンＤＦＡ１  ６５５中に状態爆発をもたらす。コンパクトな状態マシンが必要とするメモリ・リソースは、より多くの状態を有する状態マシンよりも少ない。キーワードは、状態マシンＤＦＡ１  ６５５およびＤＦＡ２  ６６０中に無条件の最終状態をもたらす。
【００７１】
少なくとも一つの例示的な実施形態において、記号セットは複数のマップ済み記号セットにマップされる。例えば、［Ａ−Ｚ］がαにマップされ、［ａ−ｚ］がβにマップされる場合、［Ａ−Ｚａ−ｚ］はαβ上にマップされる。
【００７２】
前述した状態マシンの複雑性の除去には、正規表現セットの表現を、一つ以上の閉包演算子「＊」、「＋」、任意演算子「？」または反復演算子「｛ｎ；ｍ｝」を除外した等価な表現に書き換えるステップを含めることができる。プラスの閉包演算子「＋」は閉包「＊」演算子を使って書き換えることができる。例えば、正規表現＜ＡＢ＋Ｃ＞は＜ＡＢＢ＊Ｃ＞として書き換えられる。任意演算子「？」は、「？」演算子の組み合わせ拡張によって書き換えた後、全ての冗長表現を削除することができる。さらに、反復演算子「｛ｎ；ｍ｝」は、正規表現を拡張し、全ての非制限反復を置き換えてその終端部に閉包演算子「＊」を挿入することによって書き換えることができる。例えば、＜ＡＢ｛３；５｝Ｃ＞の正規表現は、＜ＡＢＢＢＣ  ＡＢＢＢＢＣ  ＡＢＢＢＢＢＣ＞に変換することができ、＜ＡＢ｛３；｝Ｃ＞の正規表現は＜ＡＢＢＢＢ＊Ｃ＞に変換することができる。
【００７３】
前述した方法および構成は、ハードウェア、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ：ｆｉｅｌｄ−ｐｒｏｇｒａｍｍａｂｌｅ  ｇａｔｅ  ａｒｒａｙ）、または特定用途向け集積回路（ＡＳＩＣ：ａｐｐｌｉｃａｔｉｏｎ−ｓｐｅｃｉｆｉｃ  ｉｎｔｅｇｒａｔｅｄ  ｃｉｒｃｕｉｔ）で、全面的にまたは部分的に遂行することができる。また一方、前述した方法および構成は、一つ以上のプロセッサ（図には示さず）で実行されるソフトウェアで、全面的にまたは部分的に遂行することができ、該ソフトウェアは、磁気または光記憶装置など、任意の適したデータ・キャリヤ（これも図には示さず）に担持される一つ以上のコンピュータ・プログラム・エレメントの形で提供することができる。
【００７４】
少なくとも一つの例示的な実施形態において、前述のメッセージ１４０はｅメールのメッセージであり得る。しかしながら、本発明はこれに限定されるものでなく、他の種類のメッセージ（例えば、更新可能な配布先リストを有するメッセージなど）にも適用できる。
【００７５】
図８は、本発明の方法もしくはシステムまたはその両方を実装できるコンピュータ・システムの一例を示す。本開示のシステムおよび方法またはシステムおよび方法の部分は、例えば、メインフレーム、個人用コンピュータ（ＰＣ：ｐｅｒｓｏｎａｌ  ｃｏｍｐｕｔｅｒ）、ハンドヘルド・コンピュータ、サーバなどのコンピュータ・システムで実行されるソフトウェア・アプリケーションの形に実装することができる。例えば、図４の変換コンポーネント４１０および検索コンポーネント４５０、図５の解析コンポーネント５１５、更新コンポーネント５１６、第一ＤＦＡ１コンパイラ５２０、およびＤＦＡ２コンパイラ５２５、図６の入力変換コンポーネント６３５、第一状態マシン６５５、第二状態マシン６６０、およびチェック・コンポーネント６６５は、図４〜６の対応する態様を参照して前述した方法を遂行するソフトウェア・アプリケーション（群）として実装することができる。このソフトウェア・アプリケーションは、コンピュータ・システムによってローカルにアクセス可能な、および、例えばローカル・エリア・ネットワークまたはインターネットなどネットワークへの有線または無線接続によってアクセス可能な、（ハード・ディスク・ドライブ記憶装置１００８などの）コンピュータ可読媒体に格納することができる。
【００７６】
一般的にシステムというコンピュータ・システム１０００には、例えば、中央処理装置（ＣＰＵ）１００１、ランダム・アクセス・メモリ（ＲＡＭ）１００４、プリンタ・インタフェース１０１０、ディスプレイ装置１０１１、ローカル・エリア・ネットワーク（ＬＡＮ）データ送信コントローラ１００５、ＬＡＮインタフェース１００６、ネットワーク・コントローラ１００３、内部バス１００２、および、例えばキーボード、マウスなど一つ以上の入力デバイス１００９を含めることができる。図示のように、システム１０００は、リンク１００７を介して、例えばハード・ディスク１００８などのデータ記憶デバイスに接続できる。ＣＰＵ１００１は、図３〜７を参照して上記で説明した方法のステップを遂行するコンピュータ・プロセッサとすることができる。
【００７７】
入力ストリングは、ＬＡＮインタフェース１００６を介して受信することができ、本発明の実施形態によって判定されたマッチングの結果は、コンピュータ・システムから、例えばＬＡＮインタフェース１００６を介して、またはプリンタ・インタフェース１０１０を介して出力し、あるいはディスプレイ装置１０１１に出力することができる。
【００７８】
上記で開示した例示的な実施形態は単に説明のためのものであり、本発明は、本明細書の教示の助力を得れば当業者には明らかな、異なっているが同等なやり方に修改して実施できることを理解するべきである。従って、本明細書で開示した例示的な実施形態の変更または修改が可能なことは明らかであり、かかる変形は本発明の範囲および精神内にあると見なされる。
【００７９】
疑念を避けるために、本明細書の説明および請求項を通して使われている用語「含む（ｃｏｍｐｒｉｓｉｎｇ）は「だけから成る（ｃｏｎｓｉｓｔｉｎｇ  ｏｎｌｙ  ｏｆ）」の意味に解釈しないものとする。
【図１】
0005579922.tif 000002
【図２】
0005579922.tif 000003
【図３】
0005579922.tif 000004
【図４】
0005579922.tif 000005
【図５】
0005579922.tif 000006
【図６】
0005579922.tif 000007
【図７】
0005579922.tif 000008
【図８】
0005579922.tif 000009