@port139 Blog

基本的にはデジタル・フォレンジックの技術について取り扱っていますが、記載内容には高確率で誤りが含まれる可能性があります。

正規表現とサロゲートペア

例えば「A1C」「A2C」「A3C」のように A と C の間に任意の1文字が含まれる文字列を検索する場合、EnCase の正規表現では「A.C」とか書くことになるかと思います。
しかし、「A U+10000 C」という文字列の場合、実際には「A U+D800 U+DC00 C」がディスク上の文字列となります。 EFE 5.04a で「A.C」のパターンで Unicode 文字列を検索しても「A U+10000 C」はヒットしません。*1当然と言えば当然なんですが、サロゲートペアを識別して U+D800 U+DC00 を 1文字として検索してくれたほうがよいのか、2文字なんだからヒットしない現状が当たり前と考えるべきか。。。
文字を探したい場合、見た目「A□C」となっているのだから、 A.C のパターンでヒットして欲しいと考える調査員もいたりするのではないかと思ったりする今日この頃。
ま、サロゲートペアが使われていて、かつその文字を含めて正規表現で検索したいケースが多いとは思えないので、まぁ現状のままでもいっかなぁと個人的には思ってますが...

*1:UTF-8では「あ」が3byteになります。例えば「AあC」は A.C の grep パターン検索でヒットするので問題ありません。ただし、EFE 5.04aでは「A U+10000 C」のようにサロゲートペアな文字が使われている場合、UTF-8の検索がうまく動かないようです。