inno setup で 正規表現使ってみた (VBScript.RegExp使って)

利用例を適当に晒しておくので何かの参考までに。…んまぁ元々ンなに難しいことではないけども(ぉ ^^;

実装例

HKEY_USERS の直下にある ログインユーザーの SID を列挙します。 ("S-1-5-21-0011223344-5566778899-0011223344-1000" の形式にガッチリ合うモノを列挙)

VBScript.RegExp の仕様は MSDN 見ましょう。もしくはググれ

function GetUserSIDs() : array of String;
var
    names : TArrayOfString;
    name  : String;
    i     : Integer;
    size  : Longint;
    ret   : array of String; { 戻り値扱う配列 }
    reti  : Integer;         { 戻り値扱う配列の添え字 }
    regex : Variant;
begin
    reti  := 0;
    regex := CreateOleObject('VBScript.RegExp');

    { RegExp の プロパティをセット }
    IDispatchInvoke(regex, True, 'Pattern', ['^S-1-5-21-\d+-\d+-\d+-\d+$']);

    if RegGetSubkeyNames(HKEY_USERS, '', names) then
    begin
        size := GetArrayLength(names);
        SetArrayLength(ret, size); { とりあえず最大必要になる要素数を確保 // 最後に調整 }
        for i := 0 to size - 1 do
        begin
            name := names[i];
            if IDispatchInvoke(regex, False, 'Test', [name]) then { メソッド実行。 Test() は boolが返る }
            begin
                ret[reti] := name;
                reti      := reti + 1;
                Log(Format('User SID = %s', [name]));
            end;
        end;
    end;

    SetArrayLength(ret, reti); { 実際に必要になった要素数に再調整 }
    Result := ret;
end;