文字列操作¶
length¶
書式¶
$(length 文字列1)
戻り値¶
文字列1の長さ
解説¶
指定文字列の長さを返す。マルチバイト文字1字も長さ1である。Phase 9.0.0以降は内部文字列がwchar_tであり、WindowsではU+10000以上の文字(絵文字など、サロゲートペア)は長さ2になる。
使用例¶
=kis
length とても長くてすぐには何文字か分からない1byte文字も交えた例;
# 31が返る
=end
match¶
書式¶
$(match 文字列1 パターン インデックス)
戻り値¶
パターンの文字列1の中における先頭位置
解説¶
指定文字列中に指定パターンがあった場合、その先頭の位置を返す。インデックスは省略可能で、指定した場合、指定文字列の「インデックス+1」文字目から検索を始める。省略した場合、指定文字列の先頭から検索を始める。戻り値は0オリジンで、パターンが存在しなかった場合、-1を返す。
使用例¶
=kis
match 芝村をやっている 村を;
# 1が返る
match あーりーあーもー殺ーるーのー あー 2;
# 4が返る
match 我は、我である。 ジャム;
# -1が返る
=end
rmatch¶
書式¶
$(rmatch 文字列1 パターン インデックス)
戻り値¶
パターンの文字列1の中における先頭位置
解説¶
指定文字列中に指定パターンがあった場合、その先頭の位置を返す。インデックスは省略可能で、指定した場合、指定文字列の「インデックス+1」文字目から、前方に向けて検索を始める。省略した場合、指定文字列の最後尾から前方に向けて検索を始める。戻り値は0オリジンで、パターンが存在しなかった場合、-1を返す。
使用例¶
=kis
rmatch 芝村をやっている 村を;
# 1が返る
rmatch あーりーあーもー殺ーるーのー あー 2;
# 0が返る
rmatch 我は、我である。 ジャム;
# -1が返る
=end
match_at¶
書式¶
$(match_at 文字列1 パターン インデックス)
戻り値¶
パターンがあれば1、なければ""
解説¶
文字列中のインデックス番目(0オリジン)にパターンが存在すれば1。存在しなければ""を返す。指定省略時のインデックスは0.
使用例¶
=kis
match_at 芝村をやっている 村を;
# ""が返る
match_at 芝村をやっている 村を 1;
# 1が返る
match_at あーりーあーもー殺ーるーのー あー 4;
# 1が返る
match_at 我は、我である。 ジャム;
# ""が返る
=end
substr¶
書式¶
$(substr 文字列1 開始位置 長さ)
戻り値¶
部分文字列
解説¶
文字列1の部分文字列を返す。文字列1の「開始位置+1」文字目から、「長さ」文字分を返す。位置は0オリジンである。長さは省略でき、省略した場合、開始位置から末尾までを返す。位置が負の数の場合、末尾から数えた位置になる。
Phase 9.0.0以降、位置と長さはwchar_t単位(Windowsではサロゲートペアは2文字分)で数える。
使用例¶
=kis
substr ABCDEFG 3 2;
# 「DE」を返す
substr ABCDEFG 3;
# 「DEFG」を返す
=end
char_at¶
書式¶
$(char_at 文字列1 インデックス)
戻り値¶
文字列1の「インデックス+1」文字目の文字
解説¶
指定文字列の指定した場所の1文字を返す。マルチバイト文字も1文字と数える。Phase 9.0.0以降は内部文字列がwchar_tであり、WindowsではU+10000以上の文字(絵文字など、サロゲートペア)は2文字と数える。インデックスは0オリジンであることに注意。
使用例¶
=kis
char_at 世界よ、こんにちは。 2;
# 「よ」が返る
=end
sub¶
書式¶
$(sub 文字列1 パターン 置換文字列)
戻り値¶
置換後の文字列
解説¶
指定文字列中に指定パターンがあった場合、置換文字列で置き換える。gsubとの違いは、指定文字列中に指定パターンが複数あった場合、先頭の1つだけ置換する点である。
使用例¶
=kis
sub hogehogehoge ge ro;
# 「horohogehoge」が返る
=end
gsub¶
書式¶
$(gsub 文字列1 パターン 置換文字列)
戻り値¶
置換後の文字列
解説¶
指定文字列中に指定パターンがあった場合、置換文字列で置き換える。subとの違いは、指定文字列中に指定パターンが複数あった場合、全て置換する点である。
使用例¶
=kis
gsub hogehogehoge ge ro;
# 「horohorohoro」が返る
=end
rsub¶
書式¶
$(rsub 文字列1 パターン 置換文字列)
戻り値¶
置換後の文字列
解説¶
指定文字列中に指定パターンがあった場合、置換文字列で置き換える。gsubとの違いは、指定文字列中に指定パターンが複数あった場合、最後尾の1つだけ置換する点である。
使用例¶
=kis
rsub hogehogehoge ge ro;
# 「hogehogehoro」が返る
=end
tr¶
書式¶
$(tr 文字列1 置換対象文字 変換文字)
戻り値¶
置換後の文字列
解説¶
指定文字列中に置換対象文字のいずれかがあった場合、対応する変換文字に置き換える。変換文字に対応する部分がない場合、""に置き換える。perlのtr//dと同じ動作をする。
使用例¶
=kis
tr AbCdあいう ABCDABCDabcd abcdwxyz1234;
# 「aby4あいう」が返る
=end
reverse¶
書式¶
$(reverse 文字列1)
戻り値¶
前後が逆になった文字列
解説¶
文字列の前後を入れ替える。バイト単位ではなく、文字単位で入れ替えることに注意。
使用例¶
=kis
reverse 上から読んでも山本山
# 「山本山もでん読らか上」が返る
=end
tolower¶
書式¶
$(tolower 文字列1 ...)
戻り値¶
文字列中のアルファベット大文字を小文字に置換した結果
解説¶
文字列中のアルファベット大文字を小文字に置換する。半角文字のみに作用する。
使用例¶
=kis
tolower ABC def;
# 「abc def」が返る
tolower XYZ XYZ;
# 「XYZ xyz」が返る
=end
toupper¶
書式¶
$(toupper 文字列1 ...)
戻り値¶
文字列中のアルファベット小文字を大文字に置換した結果
解説¶
文字列中のアルファベット小文字を大文字に置換する。半角文字のみに作用する。
使用例¶
=kis
toupper ABC def;
# 「ABC DEF」が返る
toupper xyz xyz;
# 「xyz XYZ」が返る
=end
chr¶
書式¶
$(chr 文字コード)
戻り値¶
指定した文字コードの一文字
解説¶
指定した文字コードの一文字を返す。
Phase 9.0.0以降も結果は従来と同じで、0x80未満はそのまま、0x80~0xFFはShift_JISの1バイト文字(半角カナなど)、0x100以上はShift_JISの2バイトコードとして解釈した文字になる。
使用例¶
=kis
chr 1;
# いわゆる「バイト値1」が返る
chr 2;
# いわゆる「バイト値2」が返る
=end
split¶
書式¶
$(split エントリ1 文字列1 区切り文字列1)
戻り値¶
なし
解説¶
文字列1を区切り文字列1で分割し、エントリ1に格納する。エントリ1の以前の内容はそのまま残り、新たに格納される文は、エントリ1にpushされる。
区切り文字1は省略可能で、省略した場合は文字列1を文字ごとに分割する。
使用例¶
=kis
split string "AA:BB:CC" ":";
# AA、BB、CCに分割
split Header ${System.GhostEx} $(chr 1);
# GhostExヘッダをバイト値1で分割
split Msg "籠の中の鳥" "の";
# 籠、中、鳥に分割
split test "1ch2ch3ch" "ch";
# 1、2、3に分割
split char "世界よ、こんにちは!";
# "世界よ、こんにちは!"を文字ごとに分割
=end
join¶
書式¶
$(join エントリ1 区切り文字)
戻り値¶
結合後の文字列
解説¶
エントリ1の内容を、区切り文字を間に挟んで順に結合して返す。結合の際、エントリ1の内容は順に評価される。
区切り文字は省略可能で、省略した場合はヌル文字「""」をした場合と同じ。
使用例¶
path : WINDOWS, SYSTEM32, drivers, etc
=kis
join path "\\";
# 「WINDOWS\SYSTEM32\drivers\etc」が返る
=end
compare¶
書式¶
$(compare 文字列1 文字列2)
戻り値¶
-1、0、1のいずれか
解説¶
文字列同士を辞書順序で比較する。文字列1が文字列2より辞書順で後ならば1、文字列1が文字列2より辞書順で前ならば-1、文字列1と文字列2が等しければ0を返す。
Phase 9.0.0以降、比較はShift_JISのバイト順ではなく、Unicodeのコードポイント順で行われる。ASCII文字のみなら従来と変わらないが、漢字・かな・半角カナの間の順序は変わりうる。($[ ]内の<や>による文字列比較や、エントリ列挙の順序も同様。)
使用例¶
dict : a , aa , b , c , xa , xy , z
word : hello
=kis
setstr @count 0;
loop $(size dict) $(
if $[ $(compare $dict[${@count}] ${word}) < 1 ] $(
inc @count;
) else $(
break;
);
);
insertstr dict[${@count}] ${word};
# compareを使った大小比較の例
# 辞書順にソートしたエントリに対し、添え字0から${word}と比較し、
# ${word}より大きな単語の直前に${word}を挿入している
=end