質問: お世話になっております。 正規表現を使う場合で日本語の漢字文章を扱うという意味では、Boost.RegexとOnigmoは、どちらが向いているのでしょうか? どちらもいけるとは思うのですが、どらちらかというと○○が強いみたいなところはありますでしょうか? よろしくお願いいたします。
回答: 正規表現において`.`は1文字を表します。実はこの「1文字」の定義があいまいです。漢字のように特定のパターンにおいて組み合わせを1文字と定義するマルチバイト文字への対応の有無で結果が異なってきます。1文字を正しく認識していない正規表現エンジンでは不正なバイト位置で区切ってしまい、意図しない結果を返すことになります。Unicodeであってもこの点は改善されておらず、サロゲートペアや異体字セレクタを考慮する必要があります。 Boost.Regexは`wchar_t`のみの対応となります。Shift_JISやUTF-8などのマルチバイト文字は認識しませんし、サロゲートペアや異体字セレクタにも対応していません。 Onigmoは各種エンコーディングに対応しています。ただし、サロゲートペアや異体字セレクタへの対応状況に関するドキュメントは見つけられませんでした(ソースコードを見る限りサロゲートペアを意識する処理はありそうです)。 ご自身で、どこまでを1文字と認識して欲しいかと、それに対して各エンジンの対応状況を踏まえ、不足がある場合は、ご自身で補う必要がある点まで把握した上で、正規表現エンジンを選定することをお勧めします。