文字列操作関数 - stuncloud/UWSCR GitHub Wiki
- LENGTH
- 正規表現
- REPLACE
- FROMJSON
- TOJSON
- COPY
- POS
- BETWEENSTR
- CHKNUM
- VAL
- TRIM
- CHR
- ASC
- CHRB
- ASCB
- ISUNICODE
- STRCONV
- FORMAT
- TOKEN
- ENCODE
- DECODE
対応バージョン: 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 (次元)対応バージョン: 0.1.9
文字列のバイト数(ANSI)を得ます
配列、連想配列の長さは得られません
対応バージョン: 0.1.9
文字列のバイト数(UTF-8)を得ます
配列、連想配列の長さは得られません
対応バージョン: 0.7.0
lengthと同様文字数をカウントしますがサロゲートペアの文字は2としてカウントされます
str = "森鷗外𠮟る"
print length(str) // 5
print lengths(str) // 6利用可能な正規表現についてはこちら
対応バージョン: 0.1.5
オプション付き正規表現を返します
戻り値 = NewRe(正規表現[, 大文字小文字の区別, 複数行, 改行を含む])
- 正規表現
正規表現(文字列) - 大文字小文字の区別 (省略可)
真偽値、デフォルトはFALSE
大文字小文字を区別するならTRUE - 複数行 (省略可)
真偽値、デフォルトはFALSE
複数行を対象とする場合はTRUE
その場合^が行頭、$が行末となる - 改行を含む (省略可)
真偽値、デフォルトはFALSE
TRUEなら.が\nを含むようになる - 戻り値
正規表現オブジェクト
print NewRe("hoge", FALSE, TRUE, TRUE)
// regex: (?ima)hoge
対応バージョン: 0.0.5
正規表現によるさまざまな文字列操作を行います
後述するTESTRE、MATCH、REPLACE(正規表現使用)のラッパー関数です
戻り値 = RegEx(文字列, 正規表現[, 定数または置換文字列])
- 文字列
検索対象文字列 - 正規表現
正規表現(文字列)または正規表現オブジェクト - 定数または置換文字列 (省略可)
- REGEX_TEST (デフォルト)
TESTRE関数と同等 - REGEX_MATCH
MATCH関数と同等 - 置換文字列
REPLACE関数(正規表現使用)と同等
- REGEX_TEST (デフォルト)
- 戻り値
- REGEX_TEST
真偽値 - REGEX_MATCH
配列 - 置換文字列
置換された文字列
- 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
対応バージョン: 0.0.5
文字列に対して正規表現がマッチするかどうかを真偽値で返します
戻り値 = TestRe(文字列, 正規表現)
- 文字列
検索対象文字列 - 正規表現
正規表現(文字列)または正規表現オブジェクト - 戻り値
真偽値
対応バージョン: 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
対応バージョン: 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対応バージョン: 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対応バージョン: 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
// }対応バージョン: 0.7.0
文字列をコピーします
コピー文字列 = copy(元文字列, 開始位置, コピー文字数=EMPTY)
| 変数名 | 型 | 種別 | 説明 |
|---|---|---|---|
| 元文字列 | 文字列 | 必須 | コピー元の文字列 |
| 開始位置 | 数値 | 必須 | コピー開始位置 (1から) |
| コピー文字数 | 数値 | 省略可 | 開始位置からのコピーする文字数 |
| 省略時は元文字列の最後までコピー | |||
| コピー文字列 | 文字列 | 戻り値 | コピーされた文字列 |
| 範囲外が指定された場合は空文字列 |
文字列 = "あいうえおかきくけこ"
print copy(文字列, 6) // かきくけこ
print copy(文字列, 3, 4) // うえおか
print copy(文字列, 11) // "" (空文字列)対応バージョン: 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対応バージョン: 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対応バージョン: 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対応バージョン: 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対応バージョン: 0.7.0
Unicodeコードポイントから文字を得ます
文字 = chr(Unicodeコードポイント)
| 変数名 | 型 | 種別 | 説明 |
|---|---|---|---|
| Unicodeコードポイント | 数値 | 必須 | 特定の文字を示すUnicode文字の番号 |
| 文字 | 文字列 | 戻り値 | 該当する文字 |
| 該当するものがなければ空の文字列 |
print chr(128021) // 🐕対応バージョン: 0.7.0
文字のUnicodeコードポイントを得ます
Unicodeコードポイント = asc(文字)
| 変数名 | 型 | 種別 | 説明 |
|---|---|---|---|
| 文字 | 文字列 | 必須 | コードポイントを得たい文字 |
| 文字列が渡された場合最初の文字のみ | |||
| Unicodeコードポイント | 数値 | 戻り値 | 文字に該当するUnicode文字の番号 |
| 該当するものがなければ0 |
print asc("🐕") // 128021対応バージョン: 0.7.0
バイトコードからANSI文字を得ます
文字 = chrb(バイトコード)
| 変数名 | 型 | 種別 | 説明 |
|---|---|---|---|
| バイトコード | 数値 | 必須 | 0-255 |
| 文字 | 文字列 | 戻り値 | 該当する文字 |
| 該当するものがなければ空の文字列 |
対応バージョン: 0.7.0
文字のバイトコードを得ます
バイトコード = ascb(文字)
| 変数名 | 型 | 種別 | 説明 |
|---|---|---|---|
| 文字 | 文字列 | 必須 | バイトコードを得たい文字 |
| 文字列が渡された場合最初の文字のみ | |||
| Unicodeコードポイント | 数値 | 戻り値 | 文字に該当するバイトコード |
| 該当するものがなければ0 |
対応バージョン: 0.7.0
文字列にUNICODE専用文字(Shift-JISにない文字)が含まれるかどうかを調べる
結果 = isunicode(文字列)
| 変数名 | 型 | 種別 | 説明 |
|---|---|---|---|
| 文字列 | 文字列 | 必須 | 調べたい文字列 |
| 結果 | 真偽値 | 戻り値 | UNICODE専用文字が含まれていればTRUE |
対応バージョン: 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対応バージョン: 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対応バージョン: 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 // さ対応バージョン: 0.7.0
文字列をエンコードします
UWSCRでは文字列がUTF-8として扱われるため、文字エンコーディングの変更は機能しません
エンコード後 = encode(元文字列, CODE定数)
| 変数名 | 型 | 種別 | 説明 |
|---|---|---|---|
| 元文字列 | 文字列 | 必須 | エンコードする文字列 |
| CODE定数 | 定数 | 必須 | 変換方式を示す定数 |
CODE_ANSI : 変換されません |
|||
CODE_URL : URLエンコードを行う |
|||
CODE_UTF8 : 変換されません |
|||
CODE_HTML : 一部の記号等を文字実態参照にする (<→<) |
|||
CODE_BYTEARRAY : バイト配列(ANSI)にする |
|||
CODE_BYTEARRAYW : バイト配列(Unicode)にする |
|||
CODE_BYTEARRAYU : バイト配列(UTF8)にする |
|||
| エンコード後 | 文字列 | 戻り値 | 変換された文字列 |
| バイト配列 | 変換されたバイト配列 |
対応バージョン: 0.7.0
文字列またはバイト配列をデコードします
UWSCRでは文字列がUTF-8として扱われるため、文字エンコーディングの変更は機能しません
デコード後 = encode(元文字列, CODE定数)
デコード後 = encode(バイト配列, CODE定数)
| 変数名 | 型 | 種別 | 説明 |
|---|---|---|---|
| 元文字列 | 文字列 | 必須 | デコードする文字列 |
| バイト配列 | バイト配列 | 必須 | デコードするバイト配列 |
| CODE定数 | 定数 | 必須 | 変換方式を示す定数 |
| 元文字列をデコードする | |||
CODE_URL : URLエンコードされた文字列を元の文字列に戻す |
|||
CODE_UTF8 : 変換されません |
|||
CODE_HTML : 文字参照を文字に戻す (<→<) |
|||
| バイト配列をデコードする | |||
CODE_BYTEARRAY : バイト配列(ANSI)を文字列に戻す |
|||
CODE_BYTEARRAYW : バイト配列(Unicode)を文字列に戻す |
|||
CODE_BYTEARRAYU : バイト配列(UTF8)を文字列に戻す |
|||
| デコード後 | 文字列 | 戻り値 | デコードされた文字列 |
| 入力値と変換方式が合わない場合は元文字列またはEMPTYを返す |