6

開発中の C ライブラリに正規表現パーサーを実装することを考えています。さて、問題は、逐語的に、またはできるだけ変更を加えずに使用できるオープン ソース コードはあるかということです。コードに関する私の期待は次のとおりです。

  • C で記述する必要があります (C++ ではありません)。
  • gcc、mingw、M$VC でコンパイルする必要があります。
  • サードパーティまたは OS 固有のヘッダー/ライブラリに依存してはなりません (つまり、コンパイルに必要なものはすべて、gcc、mingw、M$VC の基本インストールですぐに利用できる必要があります)。
  • Perl 互換の正規表現構文 (PHP の PCRE など) を使用するとよいでしょう。
  • 理想的には、コードはできるだけコンパクトにする必要があります

推奨できる既製のソリューションはありますか? 私は C 用の PCRE を見ていましたが、PHP で利用できるもの (ルール) がすべて含まれているように見えますが、サイズ (1.4MB DL) は少し威圧的です。それは堅実な賭けだと思いますか?または、検討する価値のある他のオプションはありますか?

[編集]

私が開発しているライブラリは、オープン ソース、BSD ライセンスです。

4

4 に答える 4

7

正規表現が難しいので、PCRE はとても大きいです。とにかく、そのほとんどはドキュメントとサポートコードです。オブジェクト コードにコンパイルすると、はるかに小さくなります。

于 2010-12-10T14:12:30.287 に答える
6

RE2、Google 正規表現実装は線形時間 (が文字列の長さのO(n)場合) で一致を行い、PCRE および他のほとんどの正規表現エンジンは最悪の場合指数時間で実行されます。nもう 1 つの注目すべきO(n)正規表現マッチャーはflexですが、コンパイル時にすべての可能な正規表現が必要です。PCRE よりも小さいものを探している場合は、busyboxの正規表現マッチャー、またはluaのパターン マッチャーを調べてください。

于 2010-12-10T15:04:37.167 に答える
3

POSIX 正規表現構文に満足している場合は、TRE を試すことができます。Perl 構文が必要な場合は、Google がチェックする価値のある新しい実装を提供しています。

于 2010-12-10T14:52:08.480 に答える
2

PCRE は正規表現実装の事実上の標準です (正当な理由により)。サイズについて心配する必要はありません。正規表現の実装が複雑なため、サイズは大きくなります。とにかく使うだけ。

于 2010-12-10T14:14:09.083 に答える