BRE_LOAD

使い方:   #n = dllfunc("BRE_LOAD", $s1);
説明: Babaさん作の Perl 互換正規表現ライブラリ BREGEXP.DLL を ロードします。
引数:
$s1 : BREGEXP.DLL のパス名
フォルダを省略するか、空文字列を指定すると、 OS標準のDLL検索方法により BREGEXP.DLL を探します。
返り値: DLL のロードに成功した場合は 1、失敗した場合は 0 を返します。
例:
if (!dllfunc("BRE_LOAD", "BREGEXP.DLL")) {
    message "BREGEXP.DLL が見つかりません";
    freedll;
    endmacro;
}
// ...(省略)
#r = dllfunc("BRE_FREE"); // 使い終わったら BRE_FREE() で開放


BRE_FREE

使い方:   #n = dllfunc("BRE_FREE");
説明: BRE_LOAD() でロードした BREGEXP.DLL を アンロードします。
引数: (なし)
返り値: DLL のアンロードに成功した場合は 1、失敗した場合は 0 を返します。
例: (BRE_LOAD() の例を参照して下さい)


BRE_VERSION

使い方:   $s = dllfuncstr("BRE_VERSION");
説明: ロードした BREGEXP.DLL のバージョン情報を返します。
引数: (なし)
返り値: BREGEXP.DLL の BRegexpVersion() によって得られるバージョン情報文字列
例: (省略)


BRE_ERRORMSG

使い方:   $s = dllfuncstr("BRE_ERRORMSG");
説明: BREGEXP DLL の最後に呼び出した関数のエラーメッセージを返します。
引数: (なし)
返り値: BREGEXP.DLL の BMatch(), BSubst(), BTrans(), BSplit() の呼び出し時に 得られた最後のエラーメッセージ
例:
$ret = dllfuncstr("BRE_MATCH", "/[0-9]+/", "abcdef");
if ($ret == "") {
    message dllfuncstr("BRE_ERRORMSG"); // エラーの原因を表示
}
// ...


BRE_MATCH

使い方:   $pos = dllfuncstr("BRE_MATCH", $ptn, $str);
説明: 与えられた正規表現パターンに一致する部分文字列の範囲を返します。
なお、パターン中の丸括弧に一致する部分は BRE_GETNEXT(), BRE_HASMORERESULTS() で 取得することができます。
引数:
$ptn : 正規表現パターン文字列
$str : 検索対象文字列
返り値: $str 中の $ptn にマッチした範囲を表す文字列。
書式は以下の通り。

    head:len

    head: マッチした範囲の先頭位置(0 から数えます)
    len: マッチした範囲のバイト数

パターンに一致する部分がなかったときは "" を返します。
例:
$str = "Yokohama 045-222-1111"; // この中から電話番号を抜き出す

$pos = dllfuncstr("BRE_MATCH", "/0\\d{1,4}-\\d{1,4}-\\d{4}/", $str);
if ($pos != "") {
    // 見つかったら番号を表示
    ##s = strstr($pos, ":");
    ##head = val(leftstr($pos, ##s));
    ##len  = val(midstr($pos, ##s + 1, strlen($pos)));
    message "電話番号:" + midstr($str, ##head, ##len);
    // 上の4行は以下の1行と等価
//  message "電話番号:" + dllfuncstr("BRE_POSTOSTR", $pos);
}


BRE_SUBST

使い方:   $s = dllfuncstr("BRE_SUBST", $ptn, $str);
説明: 与えられた正規表現パターンに一致する部分文字列を パターン内で指定した別の文字列に置換します。
引数:
$ptn : 正規表現パターン文字列+置換文字列
$str : 置換対象文字列
返り値: 置換結果の文字列
例:
//  $str を $ptn の指定に従って置換したものを出力します。
$ptn = "s/(\\d\\d)-\\d{4}-\\d{4}/$1-xxxx-xxxx/g";
$str = "Yokohama 045-222-1111  Osaka 06-5555-6666";

$s = dllfuncstr("BRE_SUBST", $ptn, $str);
insert "result: " + $s + "\n";
//  出力結果
//  result: Yokohama 045-222-1111  Osaka 06-xxxx-xxxx


BRE_TRANS

使い方:   $s = dllfuncstr("BRE_TRANS", $ptn, $str);
説明: 与えられたパターンの通りに文字を置換します。
引数:
$ptn : 置換パターン文字列
$str : 置換対象文字列
返り値: 置換結果の文字列
例:
//  $str を $ptn の指定に従って置換したものを出力します。
$ptn = "tr/A-Z0-9/a-zx/g"; // アルファベットを小文字に、数字を x に置換
$str = "Yokohama 045-222-1111  Osaka 06-5555-6666";

$s = dllfuncstr("BRE_TRANS", $ptn, $str);
insert "result: " + $s + "\n";
//  出力結果
//  result: yokohama xxx-xxx-xxxx  osaka xx-xxxx-xxxx


BRE_SPLIT

使い方:   #n = dllfunc("BRE_SPLIT", $ptn, $str, #lim);
説明: 与えられた正規表現パターンを区切り文字列として文字列を分割します。
なお、区切られた部分文字列は BRE_GETNEXT(), BRE_HASMORERESULTS() 等で取得することができます。
引数:
$ptn : 置換パターン文字列
$str : 置換対象文字列
#lim : 分割の最大数(0 を指定すると無制限に分割)
返り値: 分割された数
何らかのエラーが起こった場合は -1 が返ります。
例:
//  $str を $ptn にマッチする文字列を区切り文字列として分割します。
$ptn = "/[ \t]*/"; // 空白またはタブで区切る
$str = "Yokohama 045-222-1111  Osaka 06-5555-6666";

#n = dllfunc("BRE_SPLIT", $ptn, $str, 0);
while (dllfunc("BRE_HASMORERESULTS")) {
    $$p = dllfuncstr("BRE_GETNEXT");
    if ($$p == "") break;
    $s = dllfuncstr("BRE_POSTOSTR", $$p);
    insert " split content: " + $s + "\n";
}
//  出力結果
//  split content: Yokohama
//  split content: 045-222-1111
//  split content: Osaka
//  split content: 06-5555-6666


BRE_GETNEXT

使い方:   $pos = dllfuncstr("BRE_GETNEXT");
説明: BRE_MATCH(), BRE_SPLIT() で得られた結果(範囲)を順に取得します。
引数: (なし)
返り値: 直前の BRE_MATCH(), BRE_SPLIT() の呼び出し時に渡した 文字列内の範囲 (書式は BRE_MATCH() を参照して下さい)
返すものがなくなったら以後は "" を返します。
例:
$$p = dllfuncstr("BRE_MATCH",
                 "/(\\d{1,4})-(\\d{1,4})-(\\d{4})/",
                 "03-765-5678");

if (dllfunc("BRE_HASMORERESULTS")) {
    $$p = dllfuncstr("BRE_GETNEXT");
    insert "市外局番:" + dllfuncstr("BRE_POSTOSTR", $$p) + "\n";
}
if (dllfunc("BRE_HASMORERESULTS")) {
    $$p = dllfuncstr("BRE_GETNEXT");
    insert "局番:" + dllfuncstr("BRE_POSTOSTR", $$p) + "\n";
}
if (dllfunc("BRE_HASMORERESULTS")) {
    $$p = dllfuncstr("BRE_GETNEXT");
    insert "番号:" + dllfuncstr("BRE_POSTOSTR", $$p) + "\n";
}
//  出力結果
//  市外局番:03
//  局番:765
//  番号:5678


BRE_POSTOSTR

使い方:   $s = dllfuncstr("BRE_POSTOSTR", $pos);
説明: BRE_MATCH(), BRE_GETNEXT() で返された範囲の文字列を返します。
引数:
$pos : 直前の BRE_MATCH(), BRE_GETNEXT() の戻り値
返り値: BRE_MATCH(), BRE_SPLIT() の呼び出し時に渡した文字列中の $pos の範囲にある文字列
例: (BRE_SPLIT(), BRE_GETNEXT() の例を参照して下さい)


BRE_HASMORERESULTS

使い方:   #n = dllfunc("BRE_HASMORERESULTS");
説明: BRE_GETNEXT() の呼び出しが まだ成功するかどうかを返します。
引数: (なし)
返り値: BRE_GETNEXT() によってまだ範囲情報が取得できる場合は 0 でない値、 そうでなければ 0 を返します。
例: (BRE_SPLIT(), BRE_GETNEXT() の例を参照して下さい)