Delphi用正規表現ユニット「SkRegExp」をC++Builderで使ってみた

DEKOのざつだん。」で紹介されていた「Delphi用正規表現ユニット「SkRegExp」」をC++Builder2010で使えるか試してみました。

次の手順で使えることを確認しました。

Delphi用正規表現ユニット「SkRegExp」」からダウンロードしたら、ファイルを展開して、「SkRegExpConst.pas」「SkRegExpW.pas」「UnicodeProp.pas」をプロジェクトに追加します。

プロジェクトを再構築するとhppファイルが作成されます。

ソースコードに次の行を追加します。

#include "SkRegExpW.hpp"

コンパイルすると、SkRegExpW.hppでインクルードファイルがオープンできないというエラーメッセージが表示されました。
そこで次のように修正しました。

#include <Skregexpconst.hpp>    // Pascal unit
#include <Unicodeprop.hpp>  // Pascal unit

の行を、次のように修正します。

#include "SkRegExpConst.hpp"    // Pascal unit
#include "UnicodeProp.hpp"  // Pascal unit

これでコンパイルできるようになりました。

ヘルプを参考にして、次のようなコードで動作を確認しました。

#include <memory>
#include "SkRegExpW.hpp"
using namespace std;
UnicodeString ExtractEmail(const UnicodeString AInputString)
{
  UnicodeString result;
  unique_ptr<TSkRegExp> r(new TSkRegExp());
  //正規表現パターンを設定
  r->Expression = "[_a-zA-Z\\d\-\\.]+@[_a-zA-Z\\d\\-]+(\\.[_a-zA-Z\\d\\-]+)+";
  //検索開始
  if (r->Exec(AInputString)) {
    do {
      result += r->Match[0] + ", ";
    } while (r->ExecNext());
  }
  return result;
}

UnicodeString emails = ExtractEmail(L"\"テスト1\"<test1@example.com> \"テスト2\"<test2@example.com>");

SkRegExpには全角を区別しない、ひらがなとカタカナを区別しないで照合する、といった日本語特有の処理があって、魅力的です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください