コンテンツにスキップ

文字列操作

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