Delphi用正規表現ユニット「SkRegExp」

■ SkRegExpの特長

SkRegExp は Delphi 用の正規表現ユニットです。Delphi 2005 から XE8 に対応しています。

Pure Delphi

SkRegExp は全て Delphi で書かれています。既存の正規表現ライブラリをDelphi に移植したものではなく、ゼロから Delph で書いています。

No DLL

外部のライブラリは必要ありません。

Perl 5.14 Compatible

Perl 5.14 互換の正規表現をサポートしています。
(SkRegExp version 2.6 以前は Perl 5.10 互換)
正規表現構文の一覧はこちらをどうぞ。

Unicode Ready

SkRegExp は文字列を全て Unicode で処理しています。
Delphi 2007 以前の ANSI 版 Delphi は WideString で、Delphi2009 以降は UnicodeString で処理しています。

  • \w、\d、\sなどの定義済み文字クラスもUnicodeに対応しています。
  • \pでは、General Category、Script、Block に対応しています。

Fast

Delphi XE に搭載された TRegEx より最大で2倍高速です。

SkRegExp が速い理由は、正規表現パターンを TRegExp ( PCRE ) より時間をかけて最適化しているからです。
最適化に時間は掛かりますが、その分検索が速く行なわれるため、トータルで速くなるわけです。

TRegEx Compatible

別配布の SkRegularExpressions.pas を使えば Delphi XE 以降に搭載された TRegEx と同じインターフェイスで使うことができます。

TRegEx から SkRegExp 、また、その逆への差し替えがカンタンに行えます。

Japanese Ready

全角半角を区別しない、ひらがなとカタカナを区別しないで照合するモードをサポートしています。

Open Source

SkRegExp はソースコードを公開しています。

Free

SkRegExp は MPL 2.0 のフリーウェアです。ライセンスに従う限り、無料で再配布、利用、改変を行うことができます。

■ TRegEx ではなく SkRegExp を使う理由

ANSI Delphi もサポート!

SkRegExp は Delphi 2005 以降の ANSI Delphi にも対応しています。
もちろん、ANSI Delphi でも Unicode に対応しています。

TRegEx 互換!

TRegEx 互換の SkRegularExpressions.pas を使えば同じソースコードをANSI Delphi でも、Unicode Delphi でも、かつ、TRegEx でも使うことができます。

速い!

SkRegExp は TRegEx より時間を掛けて正規表現パターンを最適化します。

最適化に時間は掛かりますがその分マッチが速く終わるため、トータルで速くなります。

正規表現初心者も安心!

正規表現エンジン初心者の鬼門は幾何級数的マッチです。

幾何級数的マッチとは永遠に終わらないマッチのことです。

たとえば Perl で a*a*a*a*a*a*a*a*a*a*a*a*a*aaaaaaaaaaaaa と言うパターンを aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa にマッチさせます。

するとハングアップしたかのように固まってしまいます。

これはハングアップではなく、照合すべきパターンが膨大で時間が掛かっているのです。

これを幾何級数的マッチと言います。

同じパターンを TRegExp で実行すると「マッチしない」という結果が返ってきます。

TRegEx はマッチに膨大な時間が掛かることを検出してマッチ自体を実行しないわけです。

しかし、このパターンはマッチするが正解です。

「マッチするはずのものがマッチしない」

利用者が正規表現初心者だったら混乱してしまうでしょう。

幾何級数的マッチを引き起こす正規表現パターンはカンタンに書けてしまうから厄介です。

その点、SkRegExp は、幾何級数的マッチを引き起こす正規表現パターンでも、マッチすると言う結果を、時間が掛かることなく、瞬時に出します。

幾何級数的マッチが起らない工夫をしているからです。

あなたのアプリケーションの利用者が正規表現初心者なら SkRegExp がお勧めです。

大文字小文字を区別しないマッチが Unicode 標準をフルサポート

大文字小文字を区別しないマッチは Unicode.org が公開している CaseFolding.txt に準拠します。

SkRegExp はCaseFolding.txt のフルセットに対応していますが、TRegExp はシンプルセットの対応です。

たとえば (?i)\x{0149} を \x{02BC}\x{006E}にマッチさせたとき、SkRegExp はマッチしますが、TRegEx はマッチしません。

大文字小文字を区別しないマッチの Unicode 標準フルサポートが欲しいなら SkRegExp がお勧めです。

■ 開発支援のお願い

SkRegExp は、商用、非商用を問わず、完全に無料で使うことができます。

しかし、開発を支援して頂けるのは歓迎です。

SkRegExpの開発を支援したい方はアマゾンギフト券(Eメールタイプ)を送って頂けるとうれしいです。

ギフト券を送って頂いても、あなたには何のメリットもありません。

ただ、私のモチベーションが上がって、SkRegExpの開発が続くかもしれません。

shu AT komish DOT jp 宛てにアマゾンギフト券(Eメールタイプ)を送るのはこちらからどうぞ。