で、EUCのヘキサでみると「面電」→CC CC C5 C5
「北斗」→CB CC C5 CD
2バイト文字の2バイト目と次の文字の1バイト目で引っかかってるようです。
検索するプログラムのほうがマルチバイト文字を意識して作られてないと
こういうことになっちゃうんでしょうね。
さらに検索してる文字が一文字なのでこういうことになる可能性が
高まったとも思われます。
例えばある文字列を「A or B」で検索するアルゴリズムを考えてみます(正規表現では(A|B)ですか)。
文字列をスキャンしていき、「A」または「B」にたどりつけばそこで検索終了です。特に難しいことはないでしょう。
が、「A and B」になるとどうでしょう。
「A」にたどりついても次に「B」が存在するか最後(ってどこ?)まで検索しないと答えは出ないわけです。
(もちろん「B」を先に見つけても同様です)
var arr1 = oBody.split("\n"); //各行にばらす
for (var i = arr1.length - 2; i >= 0; i--){ //最終行が1001だと投稿日時が取得できないため後ろからなめる
var arr2 = arr1[i].split("<>");
var t = arr2[2].match(/(\d+)\/(\d+)\/(\d+).*?(\d+):(\d+):?(\d+)?\.?(\d+)?/); //投稿日時取り出し
if (t){
if (!t[7]) t[7] = "00"; if (!t[6]) t[6] = "00"; //古いログでは秒やミリ秒は存在しないものがあるため
var d = new Date(t[1],t[2],t[3],t[4],t[5],t[6],t[7]);
oSession.oResponse["Last-Modified"] = d.toUTCString();
break;
}
}