SSブログ

C++で正規表現(boost::regex編) [プログラミング]

C++で正規表現を使います(その1)。

とりあえず、一番手っ取り早いのは、boostregexではないでしょうか。
次期標準C++(C++0x)に組み込まれることになっていますし、今後は、コレさえあれば他には必要なくなるような状況です。

使い方は、こんな感じ。

const char* pattern = "a+b";
const char* target = "femakabfain";

boost::regex ex(pattern);
boost::match_results<const char*> result;

if (boost::regex_search(target, result, ex)) {
    std::cout << "found\n"
              << "pos = " << result.position() << "\n"
              << "len = " << result.length() << "\n"
              << "str = " << result.str() << "\n";
} else {
    std::cout << "not found\n";
}

上の例は、文字列中からの検索(regex_search)ですが、一致(regex_match)とか置換(regex_replace)とか、必要なものは一通りそろっています。


弱点は日本語に対応していないと言うこと。

const char* pattern = "ab";
const char* target = "ヂb";

(略)

これでも検索が成功してしまいます。
「ヂ」の2バイト目が(Shift JISコードで)「0x61」で、「a」と同じなので。

日本語を扱いたい時は、boost::regexではなくて、Unicode版のboost::wregexを使いましょう(使い方は同じ)。

[飛行機] 今日の一冊
本能寺六夜物語

本能寺六夜物語

  • 作者: 岡田 秀文
  • 出版社/メーカー: 双葉社
  • 発売日: 2001/10
  • メディア: 単行本

タグ:C++
nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。