Next: , Previous: , Up: Strings and Characters   [Contents][Index]


4.3 Creating Strings

以下の関数は、新たに文字列を作成したり、文字列同士を結合して文字列を作成したり、文字列の一部から文字列を作成する関数です。

Function: make-string count character

この関数は、charactercount回繰り返すことにより作成された文字列をreturnします。countが負の場合は、エラーをシグナルします。

(make-string 5 ?x)
     ⇒ "xxxxx"
(make-string 0 ?x)
     ⇒ ""

この関数に対応する他の関数にはmake-vector (Vectorsを参照してください)、およびmake-list (Building Listsを参照してください)が含まれます。

Function: string &rest characters

この関数は、文字charactersを含む文字列をreturnします。

(string ?a ?b ?c)
     ⇒ "abc"
Function: substring string start &optional end

この関数は、stringから、インデックスstartの文字(その文字を含む)から、endまでの文字(その文字は含まない)の範囲の文字から構成される、新しい文字列をreturnします。文字列の最初の文字がインデックス0になります。

(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’は含まれません。

endnilが使用された場合、それは文字列の長さを意味します。したがって、

(substring "abcdefg" -3 nil)
     ⇒ "efg"

引数endを省略した場合、それはnilを指定したのと同じです。(substring string 0)は、stringのすべてをコピーしてreturnします。

(substring "abcdefg" 0)
     ⇒ "abcdefg"

しかし、この目的のためにはcopy-sequenceを推奨します(see Sequence Functions)。

stringからコピーされた文字がテキストプロパティーをもつ場合、そのプロパティーは新しい文字列へもコピーされます。Text Propertiesを参照してください。

substringの最初の引数にはベクターも指定できます。たとえば:

(substring [a b (c) "d"] 1 3)
     ⇒ [b (c)]

startが整数でない場合、またはendが整数でもnilでもない場合は、wrong-type-argumentエラーがシグナルされます。startendの後の文字を指す場合、またはstringにたいして範囲外の整数をどちらかに指定した場合は、args-out-of-rangeエラーがシグナルされます。

この関数に対応するのはbuffer-substring (Buffer Contentsを参照してください)で、これはカレントバッファー内のテキストの一部を含む文字列をreturnします。文字列の先頭はインデックス0ですが、バッファーの先頭はインデックス1です。

Function: substring-no-properties string &optional start end

これはsubstringと同じようにL機能しますが、値からすべてのテキストプロパティーを破棄します。startを省略したり、nilを指定することができ、この場合0に等しくなります。したがって(substring-no-properties string)は、すべてのテキストプロパティーが削除されたstringのコピーをreturnします。

Function: concat &rest sequences

この関数は、渡された引数内の文字からなる、新しい文字列をreturnします(もしあればテキストプロパティーも)。引数には文字列、数のリスト、数のベクターを指定できます。引数は変更されません。concatに引数を指定しない場合、空文字列をreturnします。

(concat "abc" "-def")
     ⇒ "abc-def"
(concat "abc" (list 120 121) [122])
     ⇒ "abcxyz"
;; nilhあ空のシーケンス。
(concat "abc" nil "-def")
     ⇒ "abc-def"
(concat "The " "quick brown " "fox.")
     ⇒ "The quick brown fox."
(concat)
     ⇒ ""

この関数は常に、任意の既存の文字列にたいしてeqではない、新しい文字列を構築しますが、結果が空文字列の時は例外です(スペースを省くために、Emacsは空のマルチバイト文字列を1つだけ作成します)。

他の結合関数(concatenation functions)についての情報は、Mapping FunctionsmapconcatVector FunctionsvconcatBuilding Listsappendを参照してください。シェルコマンドで使用される文字列の中に、個々のコマンドライン引数を結合するには、combine-and-quote-stringsを参照してください。

Function: split-string string &optional separators omit-nulls trim

この関数は、正規表現separators(Regular Expressionsを参照してください)にもとづいて、stringを部分文字列に分解します。separatorsにたいする各マッチは、分割位置を定義します。分割位置の間にある部分文字列を、リストにまとめてreturnします。

omit-nullsnil(または省略)の場合、連続する2つのseparatorsへのマッチ、またはstringの最初か最後にマッチしたときの空文字列が結果に含まれます。omit-nullstの場合、これらの空文字列は結果から除外されます。

separatorsnil(または省略)の場合、デフォルトはsplit-string-default-separatorsの値になります。

特別なケースとして、separatorsnil(または省略)の場合、常に結果から空文字列が除外されます。したがって:

(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-nullstにすれば、前の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")

オプションの引数trimが非nilの場合、その値は各部分文字列の最初と最後からトリムするテキストにマッチする正規表現を指定します。トリムにより、その部分文字列が空になるような場合、それは空文字列として扱われます。

文字列を分割して、call-processstart-processに適した、個々のコマンドライン引数のリストにする必要がある場合は、split-string-and-unquoteを参照してください。

Variable: split-string-default-separators

split-stringseparatorsにたいするデフォルト値です。通常の値は、"[ \f\t\n\r\v]+"です。


Next: , Previous: , Up: Strings and Characters   [Contents][Index]