Next: String Conversion, Previous: Modifying Strings, Up: Strings and Characters [Contents][Index]
この関数は引数が同じ文字を表すならt
、それ以外はnil
をリターンする。case-fold-search
が非nil
なら、この関数はcaseの違いを無視する。
(char-equal ?x ?x) ⇒ t (let ((case-fold-search nil)) (char-equal ?x ?X)) ⇒ nil
この関数は、2つの文字列の文字が正確にマッチすればt
をリターンする。引数にはシンボルも指定でき、この場合はそのシンボル名が使用される。case-fold-search
とは無関係にcaseは常に意味をもつ。
この関数は、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を参照されたい。
string-equal
はstring=
の別名である。
この関数は照合ルール(collation
rules)にもとづいてstring1とstring2が等しければt
をリターンする。照合ルールはstring1とstring2に含まれる文字の辞書順だけではなく、それらの文字間の関係に関する他のルールにより判断される。これは通常は、Emacs実行中のlocale環境により決定される。
たとえば異なるコーディングポイントでも、Unicodeのグレイブアクセント文字のように同じ意味なら等しいとみなされる。
(string-collate-equalp (string ?\uFF40) (string ?\u1FEF)) ⇒ t
オプション引数locale(文字列)は、照合用のカレントlocale識別子(current locale
identifier)をオーバーライドする。値はシステムに依存する。たとえばPOSIXシステムでは"en_US.UTF-8"
、MS-Windowsシステムでは"enu_USA.1252"
のlocaleが適用できるだろう。
ignore-caseが非nil
なら、それらは比較前に小文字に変換される。
MS-WindowsシステムでUnicode互換の照合をエミュレートする場合、MS-Windowsではlocaleのコードセット部分を"UTF-8"
にできないので、w32-collate-ignore-punctuation
に非nil
値をバインドすること。
あるlocale環境をシステムがサポートしなれければ、この関数はstring-equal
と同様に振る舞う。
一般的にファイルシステムは照合ルールが実装するような文字列の言語学的な等価性を尊重しないので、この関数をファイル名の等価性の比較に使用しないこと。
この関数は2つの文字列を1文字ずつ比較する。この関数は同時に2つの文字列をスキャンして、対応する文字同士がマッチしない最初のペアを探す。2つの文字列内で小さいほうの文字がstring1の文字ならstring1が小さいことになり、この関数はt
をリターンする。小さいほうの文字がstring2の文字ならstring1が大きいことになり、この関数はnil
をリターンする。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
引数としてシンボルを指定することもでき、この場合はシンボルのプリント名が比較される。
string-lessp
はstring<
の別名である。
この関数は逆順でstring1とstring2を比較した結果をリタンーする。つまりこれは(string-lessp
string2 string1)
を呼び出すのと等価である。
この関数は照合順でstring1がstring2より小さければt
をリターンする。照合順はstring1とstring2に含まれる文字の辞書順だけではなく、それらの文字間の関係に関するルールによっても判断される。これは通常はEmacs実行中のlocale環境により決定される。
たとえばソートでは区切り文字と空白文字は無視されるだろう(Sequence Functionsを参照)。
(sort '("11" "12" "1 1" "1 2" "1.1" "1.2") 'string-collate-lessp) ⇒ ("11" "1 1" "1.1" "12" "1 2" "1.2")
Cygwinではlocaleと無関係に区切り文字と空白文字が無視されることが決してないように、この振る舞いはシステム依存である。
オプション引数locale(文字列)は、照合用のカレントlocale識別子(current locale
identifier)をオーバーライドする。値はシステムに依存する。たとえばPOSIXシステムでは"en_US.UTF-8"
、MS-Windowsシステムでは"enu_USA.1252"
のlocaleが適用できるだろう。localeの値を"POSIX"
か"C"
にすると、string-collate-lessp
はstring-lessp
と同様に振る舞う。
(sort '("11" "12" "1 1" "1 2" "1.1" "1.2") (lambda (s1 s2) (string-collate-lessp s1 s2 "POSIX"))) ⇒ ("1 1" "1 2" "1.1" "1.2" "11" "12")
ignore-caseが非nil
なら、それらは比較前に小文字に変換される。
MS-WindowsシステムでUnicode互換の照合をエミュレートする場合、MS-Windowsではlocaleのコードセット部分を"UTF-8"
にできないので、w32-collate-ignore-punctuation
に非nil
値をバインドすること。
locale環境をサポートしないシステムでは、この関数はstring-lessp
と同様に振る舞う。
この関数はstring1がstring2のプレフィクス(たとえばstring2がstring1で始まる)なら、非nil
をリターンする。オプションの引数ignore-caseが非nil
ばら、比較においてcaseの違いは無視される。
この関数はsuffixがstringのサフィックス(たとえばstringがsuffixで終わる)なら、非nil
をリターンする。オプションの引数ignore-caseが非nil
なら、比較においてcaseの違いは無視される。
この関数はstring1の指定部分をとstring2指定部分を比較する。string1の指定部分とは、インデックスstart1(その文字を含む)から、インデックスend1(その文字を含まない)まで。start1にnil
を指定すると文字列の最初という意味になり、end1にnil
を指定すると文字列の長さを意味する。同様にstring2の指定部分とはインデックスstart2からインデックスend2まで。
文字列は文字列内の文字の数値により比較される。たとえばstr1とstr2は、最初に異なる文字でstr1の文字の数値が小さければ小さいと判断される。ignore-caseが非nil
なら比較を行なう前に大文字に変換される。比較用にユニバイト文字列はマルチバイト文字列に変換されるので(Text Representationsを参照)、ユニバイト文字列とそれを変換したマルチバイト文字列は常に等しくなる。
2つの文字列の指定部分がマッチした場合、値はt
になる。それ以外なら値は整数で、何文字が一致してどちらの文字が小さいかを示す。この値の絶対値は、2つの文字列の先頭から一致した文字数に1加えた値になる。string1(または指定部分)のほうが小さければ符号は負になる。
この関数はassoc
と同様に機能するが、keyは文字列かシンボルでなければならず、比較はcompare-strings
を使用して行なわれる。テストする前にシンボルは文字列に変換される。case-foldが非nil
なら、keyとalistの要素は比較前に大文字に変換される。assoc
とは異なり、この関数はコンスではない文字列またはシンボルのalist要素もマッチできる。特にalistは実際のalistではなく、文字列またはリストでも可。Association Listsを参照のこと。
バッファー内のテキストを比較する方法として、Comparing Textの関数compare-buffer-substrings
も参照してください。文字列にたいして正規表現のマッチを行なう関数string-match
も、ある種の文字列比較に使用することができます。Regexp Searchを参照してください。
Next: String Conversion, Previous: Modifying Strings, Up: Strings and Characters [Contents][Index]