「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には全角を区別しない、ひらがなとカタカナを区別しないで照合する、といった日本語特有の処理があって、魅力的です。