文字列操作関数#
コピー#
- 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])#
-
- パラメータ:
- 戻り値:
操作方法による
サンプルコード
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
一部の記号等を文字実態参照にする (
<
→<
)
- CODE_BYTEARRAY
バイト配列(ANSI)にする
- CODE_BYTEARRAYW
バイト配列(Unicode)にする
- CODE_BYTEARRAYU
バイト配列(UTF8)にする
- CODE_ANSI
- CODE_UTF8
互換性のため定数は存在していますが、無視されます
- 上記以外
元の文字列が返されます
- 戻り値:
変換方式による
- decode(文字列, 変換方式)#
- decode(バイト配列, 変換方式)
- 文字列またはバイト配列をデコードします
- パラメータ:
文字列 (文字列) -- デコードする文字列
バイト配列 (バイト配列) -- デコードするバイト配列
変換方式 (定数) --
変換方式を示す定数
- CODE_URL
URLエンコードされた文字列を元の文字列に戻す
- CODE_HTML
文字参照を文字に戻す (
<
→<
)
- CODE_BYTEARRAY
バイト配列(ANSI)を文字列に戻す
- CODE_BYTEARRAYW
バイト配列(Unicode)を文字列に戻す
- CODE_BYTEARRAYU
バイト配列(UTF8)を文字列に戻す
- CODE_UTF8
互換性のため定数は存在していますが、無視されます
- 上記以外
EMPTYが返されます
- 戻り値:
デコードされた文字列、変換できない場合は元文字列またはEMPTYを返す