|
h-tom です。
「hidesoft.2:22677| 正規表現「$」と改行」 関連になるかな?
ちなみに、私は改行文字が"[^X]$"にマッチしないという発想は、なかったですね。
"$"が\nの先頭と末尾にマッチするとかではなく、改行文字なんだから行末だろう、
という単純な考えですが。
さて、本題。
1)同じ事を、マクロを使って、変数を対象にやってみたら、"[^X]$"が"\n"に
マッチしません。a、c、f、gにはマッチします。
2)確認の意味もあり、正規表現を"$"にすると、"\n"の位置を返しますが、
検索開始位置が、変数の長さを越えても、戻り値が-1にならず、検索開始位置
を、そのまま返します。
正規表現が"$"でなければ、-1になります。
3)正規表現を"^"にすると、aの位置を返しますが、それ以降、検索開始位置を
かえて検索しても、ヒットしません。
行頭なのでb、d、gにもマッチするかと思いましたが、aだけしかマッチしま
せん。
// 01 234 5678 9
$name = "a\nbc\ndef\ng";
loaddll hidemarudir + "\\hmjre.dll";
if(!result){
message "DLLのロードに失敗しました。";
endmacro;
}
#st = 0;
while(1){
#ret = dllfunc("FindRegular","[^X]$", $name, #st);
//正規表現にマッチすると-1より大きい値を返す。
if(#ret > -1){
//マッチした部分の長さを取得
#len = dllfunc("GetLastMatchLength");
$match = midstr($name, #ret, #len);
message "match -> " + $match + "\n#st=" + str(#st) + " #ret=" + str
(#ret) + " #len=" + str(#len);
}else{
break;
}
//無限ループ防止
if(#st > (strlen($name) + 5)) break;
#st = #ret + 1;
}
freedll;
endmacro;
|
|