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


4.5 Comparison of Characters and Strings

Function: char-equal character1 character2

この関数は引数が同じ文字を表す場合はt、それ以外はnilをreturnします。case-fold-searchが非nilの場合、この関数は大文字小文字の違いを無視します。

(char-equal ?x ?x)
     ⇒ t
(let ((case-fold-search nil))
  (char-equal ?x ?X))
     ⇒ nil
Function: string= string1 string2

この関数は、2つの文字列の文字が正確にマッチする場合は、tをreturnします。引数にシンボルを指定することもでき、この場合はシンボル名が使用されます。case-fold-searchとは無関係に、大文字小文字は常に意味をもちます。

この関数は、equalで2つの文字列を比較するのと等価です(Equality Predicatesを参照してください)。特に、2つの文字列のテキストプロパティーは無視されます。テキストプロパティーだけが異なる文字列を区別する必要がある場合は、equal-including-propertiesを使用します。しかしequalとは異なり、どちらかの引数が文字列でもシンボルでもない場合、string=はエラーをシグナルします。

(string= "abc" "abc")
     ⇒ t
(string= "abc" "ABC")
     ⇒ nil
(string= "ab" "ABC")
     ⇒ nil

技術的な理由により、ユニバイト文字列とマルチバイト文字列がequalなのは、それらが同じ文字コードのシーケンスを含み、それらすべてのコードが0から127(ASCII)か、160から255(eight-bit-graphic)のときだけです。しかしユニバイト文字列をマルチバイト文字列に変更する際、コードが160から255の範囲にあるすべての文字はより高いコードに変換され、ASCII文字は変換されないまま残ります。したがってユニバイト文字列と、それを変換したマルチバイト文字列は、その文字列のすべてがASCIIのときだけequalです。マルチバイト文字列中で、もし文字コード160から255の文字があったとしても、それは完全に正しいとは言えません。結果として、すべてがASCIIではないユニバイト文字列とマルチバイト文字列がequalであるという状況は、もしかしたらEmacs Lispプロプラマーが直面するかもしれない、とても希少な偽術的に不可解な状況だといえます。Text Representationsを参照してください。

Function: string-equal string1 string2

string-equalstring=に対する別名です。

Function: string< string1 string2

この関数は、2つの文字列を1文字づつ比較します。この関数は、同時に2つの文字列をスキャンして、対応する文字同士がマッチしない最初のペアを探します。2つの文字列内で、小さいほうの文字がstring1の文字の場合、string1が小さいことになり、この関数はtをreturnします。小さいほうの文字がstring2の文字の場合、string1が大きいことになり、この関数はnilをreturnします。2つの文字列が完全にマッチした場合、値はnilになります。

文字のペアは、文字コードで比較されます。ASCII文字セットでは、小文字英字は大文字英字より、高い数値をもつことに留意してください。数字および多くの句読点文字は、大文字英字より低い数値をもちます。ASCII文字は、任意の非ASCII文字より小さくなります。ユニバイト非ASCII文字は、任意のマルチバイト非ASCII文字より、常に小さくなります(Text Representationsを参照してください)。

(string< "abc" "abd")
     ⇒ t
(string< "abd" "abc")
     ⇒ nil
(string< "123" "abc")
     ⇒ t

文字列の長さが異なり、string1の長さまでマッチする場合、結果はtになります。string2の長さまでマッチする場合、結果はnilになります。文字を含まない文字列は、他の任意の文字列より小さくなります。

(string< "" "abc")
     ⇒ t
(string< "ab" "abc")
     ⇒ t
(string< "abc" "")
     ⇒ nil
(string< "abc" "ab")
     ⇒ nil
(string< "" "")
     ⇒ nil

引数としてシンボルを指定することもでき、この場合はシンボルのプリント名が使用されます。

Function: string-lessp string1 string2

string-lesspstring<にたいする別名です。

Function: string-prefix-p string1 string2 &optional ignore-case

この関数は、string1string2のプレフィクス(接頭辞)の場合(たとえばstring2string1で始まる場合)、非nilをreturnします。オプションの引数ignore-caseが非nilの場合、比較において大文字小文字の違いは無視されます。

Function: string-suffix-p suffix string &optional ignore-case

この関数は、suffixstringのサフィックス(接尾辞)の場合(たとえばstringsuffixで終わる場合)、非nilをreturnします。オプションの引数ignore-caseが非nilの場合、比較において大文字小文字の違いは無視されます。

Function: compare-strings string1 start1 end1 string2 start2 end2 &optional ignore-case

この関数は、string1の指定された部分を、string2の指定された部分と比較します。string1の指定された部分とは、インデックスstart1(その文字を含む)から、インデックスend1(その文字を含まない)までです。start1nilを指定すると文字列の最初という意味になり、end1nilを指定すると文字列の長さを意味します同様に、string2の指定された部分とは、インデックスstart2からインデックスend2までです。

文字列は、文字列内の文字の数値により比較されます。たとえば、str1str2は、最初に異なる文字でstr1の文字の数値が小さいときに、“小さい”と判断されます。ignore-caseが非nilの場合、文字は比較を行なう前に小文字に変換されます。比較のためにユニバイト文字列はマルチバイト文字列に変換されるので(Text Representationsを参照してください)、ユニバイト文字列と、それを変換したマルチバイト文字列は、常に等しくなります。

2つの文字列の指定された部分がマッチした場合、値はtになります。それ以外では、値は整数で、これは何文字が一致して、どちらの文字が小さいかを示します。この値の絶対値は、2つの文字列の先頭から一致した文字数に1加えた値になります。string1(または指定された部分)のほうが小さい場合、符号は負になります。

Function: assoc-string key alist &optional case-fold

この関数はassocと同様に機能しますが、keyは文字列かシンボルでなければならず、比較はcompare-stringsを使用して行なわれます。テストする前にシンボルは文字列に変換されます。case-foldが非nilの場合、大文字小文字の違いは無視されます。assocとは異なり、この関数はコンスではない文字列またはシンボルのalist要素もマッチできます。特に、alistは実際のalistではなく、文字列またはリストでも可能です。Association Listsを参照してください。

バッファー内のテキストを比較する方法として、Comparing Textの関数compare-buffer-substringsも参照してください。文字列にたいして正規表現のマッチを行なう関数string-matchも、ある種の文字列比較に使用することができます。Regexp Searchを参照してください。