文字列操作関数 - stuncloud/UWSCR GitHub Wiki

LENGTH

対応バージョン: 0.2.0

戻り値 = LENGTH(式)

文字列・配列・ユーザー定義構造体の長さを返します
長さを返せない値が渡された場合は場合はエラーになります


  • 文字列、配列、ユーザー定義構造体を返す式
  • 戻り値
    • 数値
      • 文字列長
      • 配列長
      • ユーザー定義構造体サイズ

UWSCとの互換性を保つため数値やbool値も対象です
この場合それらを文字列として扱いその長さを返します
また、Emptyは0、NULLは1を返します

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
戻り値 = LENGTH(safearray [, 次元数フラグ])
  • safearray
    • SafeArray
  • 次元数フラグ
    • bool値
  • 戻り値
    • 次元数フラグが
      • TRUE: SafeArrayの次元数
      • FALSE: SafeArrayのサイズ (多次元の場合最高次元のサイズ)
sa = safearray(0, 3)
print length(sa) // 4
print length(sa, TRUE) // 1 (次元)

sa = safearray(0, 5, 0, 2)
print length(sa) // 6
print length(sa, TRUE) // 2 (次元)

LENGTHB

対応バージョン: 0.1.9

文字列のバイト数(ANSI)を得ます
配列、連想配列の長さは得られません

LENGTHU

対応バージョン: 0.1.9

文字列のバイト数(UTF-8)を得ます
配列、連想配列の長さは得られません

LENGTHS

対応バージョン: 0.7.0

lengthと同様文字数をカウントしますがサロゲートペアの文字は2としてカウントされます

str = "森鷗外𠮟る"
print length(str)  // 5
print lengths(str) // 6

正規表現

利用可能な正規表現についてはこちら

NEWRE

対応バージョン: 0.1.5

オプション付き正規表現を返します

戻り値 = NewRe(正規表現[, 大文字小文字の区別, 複数行, 改行を含む])
  • 正規表現
    正規表現(文字列)
  • 大文字小文字の区別 (省略可)
    真偽値、デフォルトはFALSE
    大文字小文字を区別するならTRUE
  • 複数行 (省略可)
    真偽値、デフォルトはFALSE
    複数行を対象とする場合はTRUE
    その場合^が行頭、$が行末となる
  • 改行を含む (省略可)
    真偽値、デフォルトはFALSE
    TRUEなら.\nを含むようになる
  • 戻り値
    正規表現オブジェクト
print NewRe("hoge", FALSE, TRUE, TRUE)

// regex: (?ima)hoge

REGEX

対応バージョン: 0.0.5

正規表現によるさまざまな文字列操作を行います
後述するTESTREMATCHREPLACE(正規表現使用)のラッパー関数です

戻り値 = RegEx(文字列, 正規表現[, 定数または置換文字列])
  • 文字列
    検索対象文字列
  • 正規表現
    正規表現(文字列)または正規表現オブジェクト
  • 定数または置換文字列 (省略可)
    • REGEX_TEST (デフォルト)
      TESTRE関数と同等
    • REGEX_MATCH
      MATCH関数と同等
    • 置換文字列
      REPLACE関数(正規表現使用)と同等
  • 戻り値
    • REGEX_TEST
      真偽値
    • REGEX_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

対応バージョン: 0.0.5

文字列に対して正規表現がマッチするかどうかを真偽値で返します

戻り値 = TestRe(文字列, 正規表現)
  • 文字列
    検索対象文字列
  • 正規表現
    正規表現(文字列)または正規表現オブジェクト
  • 戻り値
    真偽値

MATCH

対応バージョン: 0.0.5

正規表現にマッチした文字列を抜き出します

戻り値 = match(文字列, 正規表現)
  • 文字列
    検索対象文字列

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

  • 戻り値

    • グループマッチをしない場合
      文字列の配列
      各要素が正規表現にマッチした文字列
    • グループマッチをした場合 二次元配列
      各要素の0番目が正規表現にマッチした文字列
      1番目以降はサブマッチした文字列
  • グループマッチなし

    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 "  and submatches:"
            for i = 1 to length(matches) - 1
                print "    " + matches[i]
            next
        endif
    next
    
    // found: aa11
    //   and submatches:
    //     aa
    //     11
    // found: bb22
    //   and submatches:
    //     bb
    //     22
    // found: cc33
    //   and submatches:
    //     cc
    //     33
    

REPLACE

CHGMOJ

対応バージョン: 0.1.5

マッチした文字列を指定文字列で置換します
正規表現による置換も可能

戻り値 = replace(文字列, 置換対象, 置換文字列 [, 正規表現モード])
戻り値 = chgmoj(文字列, 置換対象, 置換文字列 [, 正規表現モード])
  • 文字列
    検索対象文字列

  • 置換対象
    文字列または正規表現オブジェクト

  • 置換文字列
    置換後の文字列
    正規表現モードの場合は以下のような指定が可能です

    • $0がマッチした文字列に置換される
    • $1以降はサブマッチした文字列に置換される
  • 正規表現モード (省略可)
    真偽値 (デフォルトはFALSE)
    TRUEの場合は置換対象文字列を正規表現として扱います
    置換対象が正規表現オブジェクトだった場合は必ずTRUEです
    (FALSEを指定しても無視されます)

  • 戻り値
    置換された文字列
    置換文字列がマッチしない場合は元の文字列

print REPLACE("aa11bb22cc33", "([a-z]+)(\d+)", "$1 = $2, ", TRUE)

// aa = 11, bb = 22, cc = 33,

// 正規表現オブジェクトを渡すと必ず正規表現置換
print REPLACE("aa11bb22cc33", NewRe("([a-z]+)(\d+)"), "$1 = $2, ", FALSE)
// aa = 11, bb = 22, cc = 33,

通常モードの置換は大文字小文字を区別しません
正規表現モードは大文字小文字を区別します

print replace("aA", "A", "B")       // BB
print replace("aA", "A", "B", TRUE) // aB

FROMJSON

対応バージョン: 0.1.2

json文字列をUObjectにします

戻り値 = fromjson(json)
  • json
    json文字列
  • 戻り値
    • 成功時: UObject
    • 失敗時: Empty
textblock json
{
    "foo": 1,
    "bar": 2
}
endtextblock

obj = fromjson(json)
print obj.foo // 1

TOJSON

対応バージョン: 0.1.2

UObjectをjson文字列にします

戻り値 = tojson(UObject [, prettify])
  • UObject
    UObject
  • prettify (省略可)
    TRUEならjsonを見やすくフォーマットする
    デフォルトはFALSE
  • 戻り値
    json文字列
obj = {{
    "foo": 1,
    "bar": {
        "baz": 2
    }
}}

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

print tojson(obj.bar, TRUE)
// {
//   "baz": 2
// }

COPY

対応バージョン: 0.7.0

文字列をコピーします

コピー文字列 = copy(元文字列, 開始位置, コピー文字数=EMPTY)
変数名 種別 説明
元文字列 文字列 必須 コピー元の文字列
開始位置 数値 必須 コピー開始位置 (1から)
コピー文字数 数値 省略可 開始位置からのコピーする文字数
省略時は元文字列の最後までコピー
コピー文字列 文字列 戻り値 コピーされた文字列
範囲外が指定された場合は空文字列
文字列 = "あいうえおかきくけこ"
print copy(文字列, 6)    // かきくけこ
print copy(文字列, 3, 4) // うえおか
print copy(文字列, 11)   // "" (空文字列)

POS

対応バージョン: 0.7.0

一致する文字の位置を取得します

位置 = pos(検索文字列, 検索対象, n番目=1)
変数名 種別 説明
検索文字列 文字列 必須 探す文字列
検索対象 文字列 必須 探される文字列
n番目 数値 省略可 n番目に一致する位置を返す
マイナス指定で後ろから検索
0の場合は1番目を返す
位置 数値 戻り値 見つかった位置
見つからなかった場合は0
文字列 = "ももほげもももほげももももほげもも"
print pos('ほげ', 文字列)     // 3
print pos('ほげ', 文字列,  2) // 8
print pos('ほげ', 文字列,  3) // 14
print pos('ほげ', 文字列, -1) // 14 後ろから

print pos('ほげ', 文字列,  4) // 0
print pos('ふが', 文字列)     // 0

CHKNUM

対応バージョン: 0.7.0

文字列が数値かどうかをチェックします

結果 = chknum(値)
変数名 種別 説明
文字列 必須 チェックする文字列
結果 真偽値 戻り値 数値であればTRUE
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

対応バージョン: 0.7.0

文字列を数値に変換します

数値 = val(文字列, エラー値=-999999)
変数名 種別 説明
文字列 文字列 必須 変換したい文字列
エラー値 数値 省略可 変換できなかった場合に返す値
数値 数値 戻り値 数値であればTRUE
print val(1)         // 1
print val("2")       // 2
print val("3")      // -999999
print val(TRUE)      // 1
print val("ほげ", 0) // 0

TRIM

対応バージョン: 0.7.0

文字列両端のホワイトスペース及び制御文字(※)を除去します
※ 例: null文字 (chr(0)) など

トリム済み = val(文字列, 全角空白=FALSE)
トリム済み = val(文字列, 除去文字列)
変数名 種別 説明
文字列 文字列 必須 元の文字列
全角空白 真偽値 省略可 TUREなら全角の空白文字も含めて削除
除去文字列 文字列 省略可 ホワイトスペースではなく指定文字列を除去
print trim("  abc  ") // abc
print trim(" <#CR> abc<#TAB>  ") // abc
// 全角スペース
print trim("  abc   ") //  abc 
print trim("  abc   ", FALSE) //  abc 
print trim("  abc   ", TRUE) // abc
// 指定文字
print trim("edeffededdabcedfffedeeddedf", "edf") // abc

CHR

対応バージョン: 0.7.0

Unicodeコードポイントから文字を得ます

文字 = chr(Unicodeコードポイント)
変数名 種別 説明
Unicodeコードポイント 数値 必須 特定の文字を示すUnicode文字の番号
文字 文字列 戻り値 該当する文字
該当するものがなければ空の文字列
print chr(128021) // 🐕

ASC

対応バージョン: 0.7.0

文字のUnicodeコードポイントを得ます

Unicodeコードポイント = asc(文字)
変数名 種別 説明
文字 文字列 必須 コードポイントを得たい文字
文字列が渡された場合最初の文字のみ
Unicodeコードポイント 数値 戻り値 文字に該当するUnicode文字の番号
該当するものがなければ0
print asc("🐕") // 128021

CHRB

対応バージョン: 0.7.0

バイトコードからANSI文字を得ます

文字 = chrb(バイトコード)
変数名 種別 説明
バイトコード 数値 必須 0-255
文字 文字列 戻り値 該当する文字
該当するものがなければ空の文字列

ASCB

対応バージョン: 0.7.0

文字のバイトコードを得ます

バイトコード = ascb(文字)
変数名 種別 説明
文字 文字列 必須 バイトコードを得たい文字
文字列が渡された場合最初の文字のみ
Unicodeコードポイント 数値 戻り値 文字に該当するバイトコード
該当するものがなければ0

ISUNICODE

対応バージョン: 0.7.0

文字列にUNICODE専用文字(Shift-JISにない文字)が含まれるかどうかを調べる

結果 = isunicode(文字列)
変数名 種別 説明
文字列 文字列 必須 調べたい文字列
結果 真偽値 戻り値 UNICODE専用文字が含まれていればTRUE

STRCONV

対応バージョン: 0.7.0

文字列を変換します (大文字↔小文字、ひらがな↔カタカナ、全角↔半角)
指定方法で変換できない文字列はそのまま出力されます

変換後 = 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.7.0

数値をフォーマットします

フォーマット文字列 = format(元値, 幅, 小数点桁または定数=0, 埋め方法=FMT_DEFAULT)
変数名 種別 説明
元値 数値 必須 フォーマットしたい数値
文字列 必須 フォーマットしたい文字列
数値 必須 フォーマット文字列の幅
元値が数値の場合幅に対しての不足分を埋め方法に従い埋める
元値が文字列の場合その文字列を指定幅まで繰り返す (以後の引数は無視される)
小数点桁または定数 数値 省略可 1以上で小数点以下の桁数を指定
0: 変換はしない
-1: 16進数に変換
-2: 16進数(アルファベットは小文字)に変換
-3: 2進数にする
埋め方法 定数 省略可 幅に対する不足分を埋める方法
FMT_DEFAULT (0): 半角スペースで左埋め
FMT_ZERO (1): 0で左埋め
FMT_RIGHT (2): 半角スペースで右埋め
FMT_ZEROR (3): 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'

// 文字列をフォーマット
print format("abc", 8) // abcabcab
print format("1", 8)   // 11111111

TOKEN

対応バージョン: 0.7.0

トークン切り出し

切り出し文字 = token(区切り文字, ref 元文字列, 区切り方法=FALSE, ダブルクォート内無視=FALSE)
変数名 種別 説明
区切り文字 文字列 必須 文字列を切り出すための区切り文字 (文字単位)
"#$%" の場合#,$,%それぞれが区切り文字扱い
元文字列 文字列 参照 区切られた後の残り文字を返す
区切り方法 真偽値 省略可 TRUE: 連続した区切り文字を一つの区切り扱いにする
FALSE: 区切り文字が連続していてもそれぞれ個別に区切る (デフォルト)
ダブルクォート内無視 真偽値 省略可 TRUE: ダブルクォートに括られている部分の区切り文字は無視する
FALSE: ダブルクォートがあっても区切る (デフォルト)
切り出し文字 文字列 戻り値 切り出された文字列
区切り文字が元文字列に含まれていない場合すべて切り出されます
moji = "あ-い-う-え-お"
print token("-", moji) //
print moji             // い-う-え-お
print token("-", moji) //
print moji             // う-え-お

// 連続するトークン
moji = "あいうabcえお"
// FALSEは個別に区切る
print token("abc", moji, FALSE) // あいう
print moji                      // bcえお
print token("abc", moji, FALSE) // (空文字)
print moji                      // cえお

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

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

moji = "<#DBL>あaか<#DBL>aさ"
print token("a", moji)              // "あ
print moji                          // か"aさ
moji = "<#DBL>あaか<#DBL>aさ"
print token("a", moji, FALSE, TRUE) // "あaか"
print moji                          //

ENCODE

対応バージョン: 0.7.0

文字列をエンコードします
UWSCRでは文字列がUTF-8として扱われるため、文字エンコーディングの変更は機能しません

エンコード後 = encode(元文字列, CODE定数)
変数名 種別 説明
元文字列 文字列 必須 エンコードする文字列
CODE定数 定数 必須 変換方式を示す定数
CODE_ANSI : 変換されません
CODE_URL : URLエンコードを行う
CODE_UTF8 : 変換されません
CODE_HTML : 一部の記号等を文字実態参照にする (<&lt;)
CODE_BYTEARRAY : バイト配列(ANSI)にする
CODE_BYTEARRAYW : バイト配列(Unicode)にする
CODE_BYTEARRAYU : バイト配列(UTF8)にする
エンコード後 文字列 戻り値 変換された文字列
バイト配列 変換されたバイト配列

DECODE

対応バージョン: 0.7.0

文字列またはバイト配列をデコードします
UWSCRでは文字列がUTF-8として扱われるため、文字エンコーディングの変更は機能しません

デコード後 = encode(元文字列, CODE定数)
デコード後 = encode(バイト配列, CODE定数)
変数名 種別 説明
元文字列 文字列 必須 デコードする文字列
バイト配列 バイト配列 必須 デコードするバイト配列
CODE定数 定数 必須 変換方式を示す定数
元文字列をデコードする
CODE_URL : URLエンコードされた文字列を元の文字列に戻す
CODE_UTF8 : 変換されません
CODE_HTML : 文字参照を文字に戻す (&lt;<)
バイト配列をデコードする
CODE_BYTEARRAY : バイト配列(ANSI)を文字列に戻す
CODE_BYTEARRAYW : バイト配列(Unicode)を文字列に戻す
CODE_BYTEARRAYU : バイト配列(UTF8)を文字列に戻す
デコード後 文字列 戻り値 デコードされた文字列
入力値と変換方式が合わない場合は元文字列またはEMPTYを返す
⚠️ **GitHub.com Fallback** ⚠️