Next: Modifying Strings, Previous: Predicates for Strings, Up: Strings and Characters [Contents][Index]
以下の関数はスクラッチ、文字列同士、またはその一部から文字列を作成します(string-replace
やreplace-regexp-in-string
のように他の文字列内容を変更して文字列を作成する関数についてはSearch and Replaceを参照)。
この関数はcharacterをcount回繰り返すことにより作成された文字列をリターンする。countが負ならエラーをシグナルする。
(make-string 5 ?x) ⇒ "xxxxx" (make-string 0 ?x) ⇒ ""
characterがASCII文字なら、結果は通常はユニバイト文字列になる。しかしオプション引数multibyteが非nil
なら、この関数はかわりにマルチバイト文字列を生成する。これは結果を後で非ASCII文字列と結合したり、結果の中のいくつかの文字を非ASCII文字で置換する必要がある際に有用。
この関数に対応する他の関数にはmake-vector
(Vectorsを参照)やmake-list
(Building Listsを参照)が含まれる。
この関数は文字charactersを含む文字列をリターンする。
(string ?a ?b ?c) ⇒ "abc"
この関数はstringから、インデックスstartの文字(その文字を含む)とendの文字(その文字は含まない)の間の範囲の文字で構成される、新しい文字列をリターンする。文字列の最初の文字はインデックス0。引数が1つなら、この関数は単にstringをコピーする。
(substring "abcdefg" 0 3) ⇒ "abc"
上記の例では‘a’のインデックスは0、‘b’のインデックスは1、‘c’のインデックスは2となる。インデックス3 —
この文字列の4番目の文字 —
は、コピーされる部分文字列の文字位置までをマークする。したがって文字列"abcdefg"
から‘abc’がコピーされる。
負の数は文字列の最後から数えることを意味するので、-1は文字列の最後の文字のインデックスである。たとえば:
(substring "abcdefg" -3 -1) ⇒ "ef"
この例では‘e’のインデックスは-3、‘f’のインデックスは-2、‘g’のインデックスは-1。つまり‘e’と‘f’が含まれ、‘g’は含まれない。
endにnil
を使用した場合、それは文字列の長さを意味する。したがって、
(substring "abcdefg" -3 nil) ⇒ "efg"
引数endを省略した場合、それはnil
を指定したのと同じである。(substring string
0)
はstringのすべてをコピーしてリターンする。
(substring "abcdefg" 0) ⇒ "abcdefg"
しかしこの目的のためにはcopy-sequence
を推奨する(Sequence Functionsを参照)。
stringからコピーされた文字がテキストプロパティーをもつなら、そのプロパティーは新しい文字列へもコピーされる。Text Propertiesを参照のこと。
substring
の最初の引数にはベクターも指定できる。たとえば:
(substring [a b (c) "d"] 1 3) ⇒ [b (c)]
startが整数でない、またはendが整数でもnil
でもななければ、wrong-type-argument
エラーがシグナルされる。startがendの後の文字を指す、またはstringにたいして範囲外の整数をいずれかに指定すると、args-out-of-range
エラーがシグナルされる。
この関数に対応するのはbuffer-substring
(Buffer Contentsを参照)で、これはカレントバッファー内のテキストの一部を含む文字列をリターンする。文字列の先頭はインデックス0だが、バッファーの先頭はインデックス1である。
これはsubstring
と同じように機能するが、値のすべてのテキストプロパティーを破棄する。startを省略したりnil
を指定することができ、その場合は0と等価だる。したがって(substring-no-properties string)
は、すべてのテキストプロパティーが削除されたstringのコピーをリターンする。
この関数は渡された引数内の文字からなる文字列をリターンする(もしあればテキストプロパティーも)。引数には文字列、数のリスト、数のベクターを指定できる。引数は変更されない。concat
に引数を指定しなければ空文字列をリターンする。
(concat "abc" "-def")
⇒ "abc-def"
(concat "abc" (list 120 121) [122])
⇒ "abcxyz"
;; nil
hあ空のシーケンス。
(concat "abc" nil "-def")
⇒ "abc-def"
(concat "The " "quick brown " "fox.")
⇒ "The quick brown fox."
(concat)
⇒ ""
この関数は常に新たな文字列の割り当てを行う訳ではない。呼び出し側は結果が新たな文字列であること、もしくは既存の文字列にたいしてeq
であることに依存しないよう推奨する。
特にリターン値を変更すると誤って別の文字列を変更したり、プログラム内の定数文字列の変更や、エラーをraiseすることさえあり得る。安全に変更できる文字列を取得するには、結果にcopy-sequence
を使用すること。
他の結合関数(concatenation functions)についての情報はMapping Functionsのmapconcat
、Vector Functionsのvconcat
、Building Listsのappend
を参照のこと。シェルコマンドで使用される文字列の中に、個々のコマンドライン引数を結合するには、combine-and-quote-stringsを参照されたい。
この関数は正規表現separators(Regular Expressionsを参照)にもとづいて、stringを部分文字列に分解する。separatorsにたいする各マッチは分割位置を定義する。分割位置の間にある部分文字列をリストにまとめてリターンする。
separatorsがnil
(か省略)ならデフォルトはsplit-string-default-separators
の値となり、関数はomit-nullsがt
であるかのように振る舞う。
omit-nullsがnil
(または省略)なら、連続する2つのseparatorsへのマッチか、stringの最初か最後にマッチしたときの空文字列が結果に含まれる。omit-nullsがt
なら、これらの空文字列は結果から除外される。
オプションの引数trimが非nil
なら、その値は各部分文字列の最初と最後からトリム(trim:
除去)するテキストにマッチする正規表現を指定する。トリムによりその部分文字列が空になるようなら、それは空文字列として扱われる。
文字列を分割してcall-process
やstart-process
に適するような、個々のコマンドライン引数のリストにする必要がある場合はsplit-string-and-unquoteを参照のこと。
以下は例:
(split-string " two words ") ⇒ ("two" "words")
有用性はほとんどないであろう("" "two" "words"
"")
という結果とはならない。このような結果が必要ならseparatorsに明示的な値を使用すること
(split-string " two words " split-string-default-separators) ⇒ ("" "two" "words" "")
(split-string "Soup is good food" "o") ⇒ ("S" "up is g" "" "d f" "" "d") (split-string "Soup is good food" "o" t) ⇒ ("S" "up is g" "d f" "d") (split-string "Soup is good food" "o+") ⇒ ("S" "up is g" "d f" "d")
空のマッチはカウントされます。例外は、空でないマッチを使用することにより、すでに文字列の最後に到達しているとき、またはstringが空の時で、この場合split-string
は最後の空マッチを探しません。
(split-string "aooob" "o*") ⇒ ("" "a" "" "b" "") (split-string "ooaboo" "o*") ⇒ ("" "" "a" "b" "") (split-string "" "") ⇒ ("")
しかしseparatorsが空文字列にマッチできるとき、通常はomit-nullsをt
にすれば、前の3つの例の不明瞭さはほとんど発生しない:
(split-string "Soup is good food" "o*" t) ⇒ ("S" "u" "p" " " "i" "s" " " "g" "d" " " "f" "d") (split-string "Nice doggy!" "" t) ⇒ ("N" "i" "c" "e" " " "d" "o" "g" "g" "y" "!") (split-string "" "" t) ⇒ nil
空でないマッチより空のマッチを優先するような、一部の“非貪欲(non-greedy)”な値をseparatorsに指定することにより、幾分奇妙(ではあるが予見可能)な振る舞いが発生することがある。繰り返しになるが、そのような値は実際には稀である:
(split-string "ooo" "o*" t) ⇒ nil (split-string "ooo" "\\|o+" t) ⇒ ("o" "o" "o")
split-string
のseparatorsにたいするデフォルト値。通常の値は"[ \f\t\n\r\v]+"
。
Next: Modifying Strings, Previous: Predicates for Strings, Up: Strings and Characters [Contents][Index]