ソースを記入してくださいhttps://www.cnblogs.com/majianming/p/11823697.html
現在、一般的な正規表現エンジンは、一般的に2種類に分け、DFA(決定性有限状態オートマトン)とNFA(非決定性有限状態オートマトン)
細分化した場合、NFAは、伝統的なPOSIX NFA NFAに分けることができます
それでは、どのように3名を区別しません
彼は結果を与え素早く一致させることができない場合、通常のエンジン場合は、彼はDFAかもしれ
結果のみを与える迅速一致することができるようにするためには、その伝統的なNFAであれば
問題は一致しない場合は、試合時間は基本的に同じです、その後、NFAはPOSIXある
のはなぜ?
DFAを初めて目、DFAはそれは決定性有限状態である理由これは、実際には、DFAを決定するための式は、状態の数が決定され、テキスト・ドリブン表現エンジンであります
DFA表現することで、あなたはその後、試合はまだ始まっていない、と(あなたは文字が指定されたパスを左に遭遇した場合)すべてのパスが識別された場合には、すべての可能な一致するパスを、分析することができます行う必要は最長パスの一致を取る、その後、テキストと一致して、パスは存在の最後の作品の成功を一致させた場合、パスは、何の真ん中のパスが存在しない場合は、マッチが失敗し、準拠していない削除で
また、DFAは、後方参照をサポートし、周りを見ていません
NFAは、実際に表現テストにテキストを取る、成功した場合、一致していきます、バックトラックに失敗したか、または別のブランチを選択することを、支配的なエンジンの表現であるかのレポートと一致しません
NFAの伝統やPOSIX NFA NFAエンジンの二つのタイプ、
伝統的なPOSIX NFA NFA NFAの違い複数の一致がある場合に、従来のは、一致が見つかった場合、それは直接、この試合を報告し、POSIX NFAは、すべての可能なマッチをしようとする場合、最長の左端のリターンマッチ
NFAを一致させることができますときPOSIX NFAの必要性は、マッチが成功したかどうかにすべての可能な意志の報告をしようとするので、時間が同じであるので、だから、試合はすぐに相対速度に戻すことができるようになります見つける必要があります。
エンジンのタイプ | プログラム | (怠け者)数量を無視 | キャプティブブラケット | バックトラッキング |
---|---|---|---|---|
DFA | awk (ほとんどのバージョン)、 egrep (ほとんどflex のバージョン)、 、lex 、MySQLの、のProcmail |
サポートしていません。 | サポートしていません。 | サポートしていません。 |
伝統的なNFA | EmacsのGNU、ジャワ、grep (ほとんどless のバージョン)、 、more 、.NET言語、PCREライブラリ、PerlやPHP(3つのすべての定期的なライブラリ)、PythonやRubyの、sedは(ほとんどのバージョン)、vi |
サポート | サポート | サポートしていますが、パフォーマンスの低下 |
POSIX NFA | mawk 、ほぞカーンSystems'utilities、GNU Emacsの(使用明示的に指定) |
サポートしていません。 | サポート | サポートしていますが、パフォーマンスの低下 |
混合DFA / NFA | GNU awk 、GNU grep/egrep 、Tclの |
サポート | サポート | DFAサポート |
ソースを記入してくださいhttps://www.cnblogs.com/majianming/p/11823697.html