文字列操作関数#

コピー#

copy(対象文字列, 開始位置[, コピー文字数=EMPTY])#
文字列をコピーします
パラメータ:
  • 対象文字列 (文字列) -- コピー元の文字列

  • 開始位置 (数値) -- コピー開始位置 (1から)

  • コピー文字数 (数値 省略可) -- 開始位置からコピーする文字数、省略時は末尾まで

戻り値:

コピーした文字列

サンプルコード

moji = "あいうえおかきくけこ"
print copy(moji, 6)    // かきくけこ
print copy(moji, 3, 4) // うえおか
print copy(moji, 11)   // (範囲外のため空文字)
betweenstr(対象文字列[, 前文字=EMPTY, 後文字=EMPTY, n番目=1, 数え方=FALSE])#
対象文字列から前文字列と後文字に挟まれた部分の文字列をコピーします
パラメータ:
  • 対象文字列 (文字列) -- コピー元の文字列

  • 前文字 (文字列 省略可) -- コピーしたい文字列の前にある文字列、省略時は対象文字列の先頭から

  • 後文字 (文字列 省略可) -- コピーしたい文字列の後にある文字列、省略時は対象文字列の末尾まで

  • n番目 (数値 省略可) --

    n番目に一致する前後文字の組み合わせからコピーする、マイナスの場合後ろから探す
    0指定時: 前後文字があれば該当文字列をすべて取得、それ以外は1として扱う

  • 数え方 (真偽値 省略可) --

    n番目の数え方を指定します

    • TRUEかつ正順: n番目の前文字を探し、その後に対となる後文字を探す

    • TRUEかつ逆順: 後ろからn番目の後文字を探し、その後に対となる前文字を探す

    • FALSEかつ正順: 前文字とその直後の後文字をペアとし、そのn番目を探す (ペア中に別の前文字があっても無視される)

    • FALSEかつ逆順: 後ろから見て後文字とその直前の前文字をペアとし、そのn番目を探す (ペア中に別の後ろ文字があっても無視される)

    前文字または後文字省略時は無視されます

    • 前文字を指定し後文字を省略

    • 前文字を省略し後文字を指定

    の場合この引数は無視されます
    その為UWSCとは結果が異なります

戻り値の型:

文字列またはEMPTYまたは配列

戻り値:

  • 前文字のみ指定: n番目の前文字以降の文字列を返す、該当なしならEMPTY

  • 後文字のみ指定: n番目の後文字までの文字列を返す、該当なしならEMPTY

  • 前後文字指定
    • n番目が0: 該当する文字列すべてを配列で返す、該当なしの場合空配列

    • n番目が0以外: 該当する文字列を返す、該当なしならEMPTY

サンプルコード

str = "abc?def!ghi?jkl!mno"
// 前後文字未指定の場合はそのままコピー
print betweenstr(str)
// abc?def!ghi?jkl!mno

// 前文字のみの場合は前文字後から末尾まで
print betweenstr(str, 'abc')
// ?def!ghi?jkl!mno

// 後文字のみの場合は先頭から後文字の前まで
print betweenstr(str, , 'jkl')
// abc?def!ghi?

// 前文字と後文字を指定するとその間
print betweenstr(str, 'abc', 'jkl')
// ?def!ghi?

// n番目の指定
print betweenstr(str, '?', '!', 1)
// def
print betweenstr(str, '?', '!', 2)
// jkl

str = "?aaa?bbb!ccc?ddd!eee"
// 数え方指定
print betweenstr(str, '?', '!', 2, TRUE)
// bbb
print betweenstr(str, '?', '!', 2, FALSE)
// ddd
token(区切り文字, var 元文字列[, 区切り方法=FALSE, ダブルクォート=FALSE])#
区切り文字から手前の文字を切り出します
もとの文字は切り出された状態になります
パラメータ:
  • 区切り文字 (文字列) -- 区切りとなる文字、文字列の場合それぞれの文字が区切りとなる

  • 元文字列 (文字列 参照渡し) -- 切り出される文字列、関数実行後に切り出された残りの文字列が戻ります

  • 区切り方法 (真偽値 省略可) --

    区切り文字が連続していた場合の処理方法を指定

    TRUE

    連続した区切り文字を一つの区切りとして扱う

    FALSE

    区切り文字が連続していてもそれぞれの文字を区切りとする

  • ダブルクォート (真偽値 省略可) --

    ダブルクォートで括られた文字列内で区切るかどうか

    TRUE

    ダブルクォートで括られている文字列内の区切り文字を無視

    FALSE

    ダブルクォートがあっても区切る

戻り値:

切り出した文字列

サンプルコード

moji = "あ-い-う-え-お"
print token("-", moji) // あ
print moji             // い-う-え-お
print token("-", moji) // い
print moji             // う-え-お

// 連続するトークン

// FALSEは個別に区切る
moji = "あいうabcえお"
// a で区切る
print token("abc", moji, FALSE) // あいう
print moji                      // bcえお
// b で区切る
print token("abc", moji, FALSE) // (空文字)
print moji                      // cえお

// TRUEならまとめて区切る
moji = "あいうabcえお"
print token("abc", moji, TRUE) // あいう
print moji                     // えお

// 該当する区切りがない場合文字列全体が切り出される

moji = "あいうえお"
print token("abc", moji) // あいうえお
print moji               // (空文字)

// ダブルクォート内の区切り

csv = "<#DBL>foo,bar<#DBL>,baz"
print token(",", csv)        // "foo
print csv                    // bar",baz
csv = "<#DBL>foo,bar<#DBL>,baz"
print token(",", csv, ,TRUE) // "foo,bar"
print csv                    // baz

置換#

replace(対象文字列, 置換対象, 置換文字列[, 正規表現モード=FALSE])#
chgmoj(対象文字列, 置換対象, 置換文字列[, 正規表現モード=FALSE])#
マッチした文字列を指定文字列で置換します
正規表現による置換も可能
パラメータ:
  • 対象文字列 (文字列) -- 対象となる文字列

  • 置換対象 (正規表現) -- 置換する文字列、正規表現モードの場合は正規表現を示す文字列

  • 置換対象 -- 正規表現オブジェクト (これを指定した場合必ず正規表現モードになる)

  • 置換文字列 (文字列) --

    置換後の文字列

    マッチ文字列に置換

    正規表現モードでは以下が使用可能
    $0 がマッチした文字列そのものに置換される
    $1 以降はサブマッチ

  • 正規表現モード (真偽値 省略可) --

    正規表現による置換を行う場合は TRUE
    置換対象に正規表現オブジェクトを渡した場合はこの値は無視される
    正規表現モードの場合は大文字小文字が区別されます
    正規表現モードでない場合は大文字小文字は区別されません

戻り値:

置換された文字列
置換対象が対象文字列にマッチしなかった場合は対象文字列がそのまま返る

サンプルコード

// 正規表現モードの場合は大文字小文字が区別される
print replace("aA", "A", "B")       // BB
print replace("aA", "A", "B", TRUE) // aB

// マッチ文字列を使った置換
print replace("aa11bb22cc33", "([a-z]+)(\d+)", "$1 = $2, ", TRUE)
// aa = 11, bb = 22, cc = 33,

サイズ#

length()#
文字列の文字数、配列や構造体のサイズを返します
長さを返せない値が渡された場合はエラー
パラメータ:

(文字列他) -- 文字数を得たい文字列

戻り値:

文字数やサイズを示す数値

対応する値型

  • 文字列: 文字数を返す

  • 数値: 文字列とみなし文字数を返す

  • 真偽値: 文字列とみなし文字数を返す

  • EMPTY: 0

  • NULL: 1 (UWSC互換、0でないことに注意)

  • 配列: 配列長を返す

  • 連想配列: 配列長を返す

  • バイト配列: 配列長を返す

  • 構造体定義: 構造体のサイズを返す

  • 構造体: 構造体サイズを返す

  • RemoteObject: lengthプロパティを持つならその値

  • UObject (配列): 配列長を返す

  • UObject (オブジェクト): 子要素の数を返す

サンプルコード

print length("あいうえお") // 5
print length([1, 2, 3]) // 3

// 構造体定義
struct Point
    x: long // 4
    y: long // 4
endstruct

print length(Point) // 8

p = Point() // 構造体インスタンスにも対応
print length(p) // 8

// UObject
obj = @{
    "foo": [1,2,3],
    "bar": 123
}@

print length(obj.foo) // 3  (配列の場合は配列要素数
print length(obj)     // 2  (オブジェクトの場合は子オブジェクトの数
lengthb(文字列)#
文字列のバイト数(ANSI)を得ます
パラメータ:

文字列 (文字列) -- 長さを得たい文字列

戻り値:

ANSIバイト数

lengthu(文字列)#
文字列のバイト数(UTF-8)を得ます
パラメータ:

文字列 (文字列) -- 長さを得たい文字列

戻り値:

UTF8バイト数

lengths(文字列)#
サロゲートペアの文字を2文字分としてカウントします
パラメータ:

文字列 (文字列) -- 長さを得たい文字列

戻り値:

サロゲートペアを2文字とした文字数

サンプルコード

str = "森鷗外𠮟る"
print length(str)  // 5
print lengths(str) // 6
lengthw(文字列)#
NULL終端Unicode文字列としての長さを得ます
パラメータ:

文字列 (文字列) -- 長さを得たい文字列

戻り値:

符号なし16ビット整数の配列長

正規表現#

NewRE(正規表現[, 大小文字=FALSE, 複数行=FALSE, 改行=FALSE])#
正規表現オブジェクトを返します
パラメータ:
  • 正規表現 (文字列) -- 正規表現を表す文字列

  • 大小文字 (真偽値 省略可) -- 大文字小文字を区別するなら TRUE

  • 複数行 (真偽値 省略可) --

    複数行を対象とするなら TRUE
    その場合 ^ が行頭、 $ が行末と一致する

  • 改行 (真偽値 省略可) -- TRUE であれば .\n にマッチするようになる

戻り値:

正規表現オブジェクト

サンプルコード

print NewRe("hoge", FALSE, TRUE, TRUE) // regex: (?ima)hoge
regex(文字列, 正規表現[, 操作方法=REGEX_TEST])#
正規表現による様々な文字列操作を行います
TestRE, Match 及び replace の一部の機能を持ちます
パラメータ:
  • 文字列 (文字列) -- 対象となる文字列

  • 正規表現 (文字列または正規表現オブジェクト) -- 正規表現を示す文字列またはオブジェクト

  • 操作方法 (定数または文字列 省略可) --

    指定方法により結果が異なる

    REGEX_TEST (定数)
    文字列に正規表現がマッチするかを調べる、 詳しくは TestRE を参照
    結果は真偽値で返る
    REGEX_MATCH (定数)
    正規表現にマッチした文字列を得る、 詳しくは Match を参照
    結果は文字列の配列で返る
    文字列
    文字列の置換を行う
    置換後の文字列を返す

戻り値:

操作方法による

サンプルコード

target = "abc123def"
re = "\d+"
print regex(target, re)              // True
print regex(target, re, REGEX_TEST)  // True
print regex(target, re, REGEX_MATCH) // [123]
print regex(target, re, "456")       // abc456def
TestRE(文字列, 正規表現)#
文字列に対し正規表現がマッチするかを調べます
RegEx(文字列, 正規表現, REGEX_TEST) と同等です
パラメータ:
  • 文字列 (文字列) -- 対象となる文字列

  • 正規表現 (正規表現) -- 正規表現文字列またはオブジェクト

戻り値:

真偽値

Match(文字列, 正規表現)#
正規表現にマッチした文字列を列挙します
RegEx(文字列, 正規表現, REGEX_MATCH) と同等です
パラメータ:
  • 文字列 (文字列) -- 対象となる文字列

  • 正規表現 (正規表現) -- 正規表現文字列またはオブジェクト

戻り値:

配列

  • グループマッチをしない場合: 文字列の配列

    各要素がマッチした文字列

  • グループマッチした場合: 文字列の二次元配列

    各要素の1番目がマッチした全体の文字列、2番目以降はサブマッチした文字列

サンプルコード

// グループマッチなし
for m in match("aa11bb22cc33", "\d+")
    print "found: " + m
next
// found: 11
// found: 22
// found: 33

// グループマッチなし
for matches in match("aa11bb22cc33", "([a-z]+)(\d+)")
    print "found: " + matches[0]
    if length(matches) > 1 then
        print "  submatches:"
        for i = 1 to length(matches) - 1
            print "    " + matches[i]
        next
    endif
next
// found: aa11
//   submatches:
//     aa
//     11
// found: bb22
//   submatches:
//     bb
//     22
// found: cc33
//   submatches:
//     cc
//     33

利用可能な正規表現#

こちら を参照してください

JSON#

FromJson(json)#
json文字列をUObjectにします
パラメータ:

json (文字列) -- json文字列

戻り値:

変換に成功した場合は UObject 、失敗時は EMPTY

サンプルコード

textblock json
{
    "foo": 1,
    "bar": 2
}
endtextblock

obj = fromjson(json)
print obj.foo // 1
ToJson(UObject[, 整形=FALSE])#
UObjectをjson文字列にします
パラメータ:
  • UObject (UObject) -- json文字列にしたいUObject

  • 整形 (真偽値 省略可) -- TRUEならjsonを見やすい形式にする

戻り値:

json文字列

サンプルコード

obj = @{
    "foo": 1,
    "bar": {
        "baz": 2
    }
}@

print tojson(obj)
// {"bar":{"baz":2},"foo":1}

// 整形する
print tojson(obj, TRUE)
// {
//   "bar": {
//     "baz": 2
//   },
//   "foo": 1
// }

// 子オブジェクトも変換可能
print tojson(obj.bar)
// {"baz": 2}

検索#

pos(検索文字列, 対象文字列[, n番目=1])#
対象文字列の何文字目に検索文字列があるかを得ます
パラメータ:
  • 検索文字列 (文字列) -- 探す文字列

  • 対象文字列 (文字列) -- 探される文字列

  • n番目 (数値 省略可) -- n番目に一致する位置を得る、マイナスの場合後ろから探す

戻り値:

見つかった位置、見つからなかった場合0

サンプルコード

moji = "ももほげもももほげももももほげもも"
print pos('ほげ', moji)     // 3
print pos('ほげ', moji,  2) // 8
print pos('ほげ', moji,  3) // 14
print pos('ほげ', moji, -1) // 14 後ろから

// 見つからない場合は0
print pos('ほげ', moji,  4) // 0
print pos('ふが', moji)     // 0

変換系#

chknum()#
与えられた値が数値に変換可能かどうかを調べる
パラメータ:

() -- 調べたい値

戻り値:

数値に変換可能かどうかを示す真偽値

サンプルコード

for v in ["1", 2, "3", "四", "Ⅴ", TRUE, "FALSE"]
    print v + ": " + chknum(v)
next
// 1: True
// 2: True
// 3: False
// 四: False
// Ⅴ: False
// True: True
// FALSE: False
val(文字列[, エラー値=-999999])#
文字列を数値に変換します
パラメータ:
  • 文字列 (文字列) -- 数値に変換したい文字列

  • エラー値 (数値 省略可) -- 変換できなかった場合に返す数値

戻り値:

成功時は変換された数値、失敗時はエラー値

サンプルコード

print val(1)         // 1
print val("2")       // 2
print val("3")      // -999999
print val(TRUE)      // 1
print val("ほげ", 0) // 0
trim(対象文字列[, 全角空白=FALSE])#
trim(対象文字列, 除去文字列)
対象文字列の両端にあるホワイトスペースおよび制御文字を除去します
パラメータ:
  • 対象文字列 (文字列) -- トリム対象文字列

  • 全角空白 (真偽値 省略可) -- TRUEにした場合は全角の空白もトリム対象になります

  • 除去文字列 (文字列) -- ホワイトスペース・制御文字ではなく指定文字を除去します

戻り値:

トリム後の文字列

サンプルコード

print trim("  abc  ")
// abc

// 改行なども含む
print trim(" <#CR> abc<#TAB>  ")
// abc

// 制御文字
print trim(NULL * 3 + 'abc' + NULL * 3)
// abc

// 全角スペース
print trim("  abc   ")
// 第2引数省略時は全角空白=FALSEとなる
//  abc
print trim("  abc   ", FALSE)
//  abc
print trim("  abc   ", TRUE)
// abc

// 指定文字
// この場合 e, d, f のいずれかが連続していれば除去する
print trim("edeffededdabcedfffedeeddedf", "edf")
// abc
chr(コードポイント)#
Unicodeコードポイントから文字を得ます
パラメータ:

コードポイント (数値) -- Unicodeコードポイント

戻り値:

該当する文字、なければ空文字

サンプルコード

print chr(128021) // 🐕
chrb(バイトコード)#
バイトコードからASCII文字を得ます
パラメータ:

バイトコード (数値) -- 0~255

戻り値:

該当する文字、なければ空文字

asc(文字)#
文字からUnicodeコードポイントを得ます
パラメータ:

文字 (文字列) -- コードポイントを得たい文字 (文字列の場合最初の文字のみ)

戻り値:

該当するUnicodeコードポイント、なければ0

サンプルコード

print asc("🐕") // 128021
ascb(文字)#
ASCII文字からバイトコードを得ます
パラメータ:

文字 (文字列) -- バイトコードを得たい文字 (文字列の場合最初の文字のみ)

戻り値:

該当するバイトコード、なければ0

isunicode(対象文字列)#
文字列中にUnicode専用文字(ANSIにない文字)が含まれるかどうかを調べる
パラメータ:

対象文字列 (文字列) -- 調べたい文字列

戻り値:

Unicode専用文字が含まれていればTRUE

サンプルコード

print isunicode("森鴎外叱る") // FALSE
print isunicode("森鷗外𠮟る") // TRUE
strconv(対象文字列, 変換方法)#
文字列を変換します (大文字↔小文字、ひらがな↔カタカナ、全角↔半角)
指定方法で変換できない文字列はそのまま出力されます
パラメータ:
  • 対象文字列 (文字列) -- 変換したい文字列

  • 変換方法 (定数) --

    変換方法を以下の定数で指定

    SC_LOWERCASE

    小文字に変換

    SC_UPPERCASE

    大文字に変換

    SC_HIRAGANA

    ひらがなに変換

    SC_KATAKANA

    カタカナに変換

    SC_HALFWIDTH

    半角文字に変換

    SC_FULLWIDTH

    全角文字に変換

戻り値:

変換された文字列

サンプルコード

print strconv('あいうえお', SC_KATAKANA)                  // アイウエオ
print strconv('あいうえお', SC_HALFWIDTH)                 // あいうえお
print strconv('あいうえお', SC_KATAKANA or SC_HALFWIDTH)  // アイウエオ
print strconv('カキクケコ', SC_HIRAGANA)                  // かきくけこ
print strconv('カキクケコ', SC_HALFWIDTH)                 // カキクケコ
print strconv('サシスセソ', SC_FULLWIDTH)                      // サシスセソ
print strconv('サシスセソ', SC_FULLWIDTH or SC_HIRAGANA)       // さしすせそ
print strconv('abcde', SC_UPPERCASE)                      // ABCDE
print strconv('abcde', SC_UPPERCASE or SC_FULLWIDTH)      // ABCDE
format(数値, [, 桁数=0, 埋め方法=FMT_DEFAULT])#
数値を指定方法でフォーマットした文字列を返します
パラメータ:
  • 数値 (数値) -- フォーマットしたい数値

  • (数値) --

    フォーマット後の文字列幅

    幅が入力値の桁を越えている場合、埋め方法に従い不足分を埋めます

  • 桁数 (数値 省略可) --

    小数点以下の桁数、または変換方法を指定

    1以上の数値

    小数点以下を指定桁数に丸める

    0

    変換しない

    -1

    16進数に変換 (アルファベット大文字)

    -2

    16進数に変換 (アルファベット小文字)

    -3

    2進数に変換

  • 埋め方法 (定数 省略可) --

    幅に対する不足分を埋める方法

    FMT_DEFAULT

    半角スペースで左埋め

    FMT_ZERO

    0で左埋め

    FMT_RIGHT

    半角スペースで右埋め

    FMT_ZEROR

    0で右埋め

戻り値:

フォーマットされた文字列

サンプルコード

// 幅指定
print format(1, 8)                // '       1'
// 小数点
print format(1, 8, 2)             // '    1.00'
// 丸め
print format(1.234, 0, 2)         // 1.23
print format(1.235, 0, 2)         // 1.24
// 16進数
print format(42, 0, -1)           // 2A
// 16進数 (小文字)
print format(42, 0, -2)           // 2a
// 2進数
print format(42, 0, -3)           // 101010

// 0埋め
print format(42, 4, -1, FMT_ZERO) // 002A
// 右埋め
print format(1, 8, 0, FMT_RIGHT)  // '1       '
// 右0埋め
print format(1, 8, 0, FMT_ZEROR)  // '10000000'
format(文字列, )
パラメータ:
  • 文字列 (文字列) -- フォーマットしたい文字列

  • (数値) --

    フォーマット後の文字列幅

    幅が元の文字列長を越えた場合、指定幅まで元の文字を繰り返します

戻り値:

フォーマットされた文字列

サンプルコード

// 文字列をフォーマット
print format("abc", 8) // abcabcab
print format("1", 8)   // 11111111
format(秒数, 日時フォーマット文字列[, ミリ秒=FALSE])
パラメータ:
  • 秒数 (数値) -- 2000/01/01からの秒数またはミリ秒数

  • 日時フォーマット文字列 (文字列) --

    日時形式を示すフォーマット文字列
    変換される日時はローカルタイムゾーン準拠

    時刻フォーマットの書式

    2023/01/23 13:24:56を基準に書式の例を以下に記します

    書式

    出力

    備考

    %Y

    2023

    年(4桁)

    %y

    23

    年(下4桁)

    %m

    01

    月(左0埋め)

    %d

    23

    日(左0埋め)

    %F

    2023-01-23

    年-月-日

    %H

    13

    時(左0埋め、24時間)

    %I

    01

    時(左0埋め、12時間)

    %M

    24

    分(左0埋め)

    %S

    56

    秒(左0埋め)

    %R

    13:24

    hh:mm

    %R

    13:24

    時:分

    %T

    13:24:56

    時:分:秒

    %X

    13時24分56秒

    ローカル時刻表示(日本の場合)

    %+

    2023-01-23T13:24:56+09:00

    ISO8601/RFC3339形式

    詳細な書式一覧は このリンク から確認できます

    表記のローカライズについて

    日本語環境でのみ日本語にローカライズされます
    それ以外では英語(en-US)表記になります

  • ミリ秒 (真偽値 省略可) -- TRUEなら秒数をミリ秒として扱う

戻り値:

フォーマットされた文字列

サンプルコード

// 日時フォーマット
timestamp = gettime(, "2023/04/01 10:10:10")
print format(timestamp, "%c") // 2023年04月01日 10時10分10秒
encode(元文字列, 変換方式)#
文字列をエンコードします
パラメータ:
  • 元文字列 (文字列) -- エンコードしたい文字列

  • 変換方式 (定数) --

    変換方式を示す定数

    CODE_URL

    URLエンコードを行う

    CODE_HTML

    一部の記号等を文字実態参照にする (<&lt;)

    CODE_BYTEARRAY

    バイト配列(ANSI)にする

    CODE_BYTEARRAYW

    バイト配列(Unicode)にする

    CODE_BYTEARRAYU

    バイト配列(UTF8)にする

    CODE_ANSI
    CODE_UTF8

    互換性のため定数は存在していますが、無視されます

    上記以外

    元の文字列が返されます

戻り値:

変換方式による

decode(文字列, 変換方式)#
decode(バイト配列, 変換方式)
文字列またはバイト配列をデコードします
パラメータ:
  • 文字列 (文字列) -- デコードする文字列

  • バイト配列 (バイト配列) -- デコードするバイト配列

  • 変換方式 (定数) --

    変換方式を示す定数

    CODE_URL

    URLエンコードされた文字列を元の文字列に戻す

    CODE_HTML

    文字参照を文字に戻す (&lt;<)

    CODE_BYTEARRAY

    バイト配列(ANSI)を文字列に戻す

    CODE_BYTEARRAYW

    バイト配列(Unicode)を文字列に戻す

    CODE_BYTEARRAYU

    バイト配列(UTF8)を文字列に戻す

    CODE_UTF8

    互換性のため定数は存在していますが、無視されます

    上記以外

    EMPTYが返されます

戻り値:

デコードされた文字列、変換できない場合は元文字列またはEMPTYを返す