この関数は、引数が同一の文字を表す場合は t を、そうでない場合は nil を返します。case-fold-search が
nil でない場合、この関数は大文字・小文字の区別を無視します。
(char-equal ?x ?x)
⇒ t
(let ((case-fold-search nil))
(char-equal ?x ?X))
⇒ nil
この関数は、2つの文字列の文字が完全に一致する場合に t
を返します。引数としてシンボルを指定することもでき、その場合はシンボル名が使用されます。case-fold-search に関わらず、常に大文字と小文字が区別されます。
この関数は、2つの文字列を比較する場合に equal と同等です(等価述語
を参照)。特に、2つの文字列のテキストプロパティは無視されます。テキストプロパティのみが異なる文字列を区別する必要がある場合は、equal-including-properties を使用してください。ただし、equal とは異なり、いずれかの引数が文字列またはシンボルでない場合、string-equal はエラーを報告します。
(string-equal "abc" "abc")
⇒ t
(string-equal "abc" "ABC")
⇒ nil
(string-equal "ab" "ABC")
⇒ nil
ユニバイト文字列とマルチバイト文字列が string-equal の意味で等しいのは、両者がいずれも
0–127 (ASCII)
の範囲にある同一の文字コード列を含んでいる場合に限られる。テキスト表現を参照。
string=はstring-equalの別名です。
string-equal-ignore-case は、case-fold-search が t の場合の
char-equal のように、大文字小文字を区別せずに文字列を比較します。
この関数は、string1 と string2
が、指定された locale(デフォルトは現在のシステムロケール)の照合規則に従って等しい場合に
t を返します。照合規則は、string1 と
string2
に含まれる文字の辞書順だけでなく、これらの文字間の関係に関するさらなる規則によっても決定されます。通常、これは Emacs
が動作しているロケール環境と、Emacs がリンクされた標準 C ライブラリによって定義されます4。
例えば、異なるグレイヴ・アクセントのUnicode文字のように、コードポイントは異なるが意味が同じ文字は、一部のロケールでは等しいとみなされる場合があります:
(string-collate-equalp (string ?\uFF40) (string ?\u1FEF))
⇒ t
オプション引数 locale(文字列)は、照合用の現在のロケール識別子の設定を上書きします。この値はシステムに依存しており、POSIXシステムでは
locale や "en_US.UTF-8" が適用され、例えば MS-Windows システムでは
"enu_USA.1252" となります。
ignore-case が nil
でない場合、文字は小文字に変換され、大文字小文字を区別せずに比較されます。ただし、基盤となるシステムライブラリがロケール固有の照合規則を提供していない場合、この関数は
string-equal にフォールバックし、その場合 ignore-case 引数は無視され、比較は常に大文字小文字を区別して行われます。
MS-WindowsシステムでUnicode準拠の照合をエミュレートするには、ロケールのコードセット部分がMS-Windowsでは"UTF-8"になり得ないため、w32-collate-ignore-punctuationをnil以外の値にバインドしてください。
システムがロケール環境をサポートしていない場合、この関数は string-equal
と同様に動作します。
ファイルシステムは一般的に、照合処理で実装されている文字列の言語的な等価性を考慮しないため、この関数をファイル名の等価性判定に使用しないでください。
この関数は、2つの文字列を1文字ずつ比較します。両方の文字列を同時に走査し、最初に一致しない対応する文字のペアを探します。これら2つの文字のうち小さい方が
string1 の文字である場合、string1
の方が小さく、この関数は t を返します。小さい方が string2 の文字である場合、string1
の方が大きく、この関数は nil を返します。2つの文字列が完全に一致する場合、値は nil となります。
文字のペアは、それぞれの文字コードに基づいて比較されます。ASCII 文字セットでは、小文字は対応する大文字よりも数値が大きくなる点に注意してください。また、数字や多くの句読点文字は、大文字よりも数値が小さくなります。ASCII 文字は、いかなる非ASCII 文字よりも小さい値となります。ただし、ユニバイト文字列とマルチバイト文字列に共通しているのはASCII 文字セットのみであるため、通常、これら2種類の文字列間で他の文字を比較することに意味はありません(テキスト表現を参照)。
(string-lessp "abc" "abd")
⇒ t
(string-lessp "abd" "abc")
⇒ nil
(string-lessp "123" "abc")
⇒ t
文字列の長さが異なり、string1の長さまで一致した場合、結果はtとなります。string2の長さまで一致した場合、結果はnilとなります。文字を含まない文字列は、他のどの文字列よりも短くなります。
(string-lessp "" "abc")
⇒ t
(string-lessp "ab" "abc")
⇒ t
(string-lessp "abc" "")
⇒ nil
(string-lessp "abc" "ab")
⇒ nil
(string-lessp "" "")
⇒ nil
引数としてシンボルも指定可能で、その場合はプリント名が比較されます。
string<はstring-lesspの別名です。
この関数は、string1 と string2
を逆の順序で比較した結果を返します。つまり、(string-lessp string2 string1)
を呼び出すのと同等です。
string>はstring-greaterpの別名です。
この関数は、指定された locale(デフォルトは現在のシステムロケール)の照合順序において string1 が string2 より小さい場合に t を返します。照合順序は、string1 および string2
に含まれる文字の辞書順だけでなく、これらの文字間の関係に関するさらなる規則によっても決定されます。通常、これは Emacs
が動作しているロケール環境と、Emacs がリンクされた標準 C ライブラリによって定義されます。
例えば、ソートの際には句読点や空白文字が無視される場合があります(シーケンスを参照):
(sort '("11" "12" "1 1" "1 2" "1.1" "1.2")
:lessp #'string-collate-lessp)
⇒ ("11" "1 1" "1.1" "12" "1 2" "1.2")
この挙動はシステムに依存します。例えば、Cygwinではロケールに関わらず、句読点や空白文字が無視されることはありません。
オプション引数 locale(文字列)は、照合用の現在のロケール識別子の設定を上書きします。この値はシステムに依存し、POSIXシステムでは
locale や "en_US.UTF-8" が適用されますが、例えば MS-Windows システムでは
"enu_USA.1252" となります。locale に "POSIX" または
"C" を指定すると、string-collate-lessp は string-lessp と同様に動作します:
(sort '("11" "12" "1 1" "1 2" "1.1" "1.2")
:lessp (lambda (s1 s2) (string-collate-lessp s1 s2 "POSIX")))
⇒ ("1 1" "1 2" "1.1" "1.2" "11" "12")
ignore-case が nil
でない場合、文字は小文字に変換され、大文字小文字を区別せずに比較されます。ただし、基盤となるシステムライブラリがロケール固有の照合規則を提供していない場合、この関数は
string-lessp にフォールバックし、その場合 ignore-case 引数は無視され、比較は常に大文字小文字を区別して行われます。
MS-WindowsシステムでUnicode準拠の照合をエミュレートするには、ロケールのコードセット部分がMS-Windowsでは"UTF-8"になり得ないため、w32-collate-ignore-punctuationをnil以外の値にバインドしてください。
システムがロケール環境をサポートしていない場合、この関数は string-lessp
と同様に動作します。
この関数は文字列を辞書順に比較しますが、数値文字の並びについては10進数であるかのように扱い、それらの数値を比較します。したがって、たとえ ‘12’ が辞書順で ‘2’ よりも “小さい” としても、この述語によれば ‘foo2.png’ は ‘foo12.png’ よりも “小さい” ことになります。
この関数は、string1 が string2
の接頭辞である場合(すなわち string2 が string1 で始まる場合)、non-nil
を返します。オプション引数 ignore-case が non-nil である場合、比較では大文字小文字の区別は無視されます。
この関数は、suffix が string
の接尾辞である場合(すなわち、string が suffix
で終わる場合)、non-nil を返します。オプション引数 ignore-case が non-nil
である場合、比較では大文字小文字の区別は無視されます。
ともに文字列である haystack 内で、最初に出現する needle の位置を返します。start-pos が nil でない場合は、haystack
のその位置から検索を開始します。一致するものが見つからなかった場合は nil
を返します。この関数は比較を行う際、文字列内の文字のみを考慮し、テキストプロパティは無視します。マッチングは常に大文字小文字を区別します。
この関数は、string1 の指定した部分と string2
の指定した部分を比較します。string1 の指定した部分は、インデックス start1(含む)からインデックス end1(除く)までです。start1 における nil は文字列の先頭を、end1 における nil は文字列の長さを表します。同様に、string2
の指定した部分は、インデックス start2 からインデックス end2 までです。
The strings are compared by the numeric values of their characters. For
instance, str1 is considered less than str2 if its first differing character has a smaller
numeric value. If ignore-case is non-nil, characters are converted to upper-case, using the
current buffer’s case-table (see The Case Table), before comparing them. Unibyte
strings are converted to multibyte for comparison (see Text Representations), so that a
unibyte string and its conversion to multibyte are always regarded as equal.
2つの文字列の指定された部分が一致する場合、値は t
となります。そうでない場合、値は、先頭の何文字が一致し、どちらの文字列がより小さいかを示す整数となります。その絶対値は、2つの文字列の先頭で一致する文字数に1を加えたものです。string1(またはその指定された部分)の方が小さい場合、符号は負となります。
この関数は、ソース文字列 string1 とターゲット文字列 string2 の間のレーベンシュタイン距離を返します。レーベンシュタイン距離とは、ソース文字列をターゲット文字列に変換するために必要な1文字単位の変更(削除、挿入、または置換)の数であり、文字列間の編集距離の定義の一つです。
文字列の大文字・小文字は計算される距離に影響しますが、テキストプロパティは無視されます。オプション引数 bytecompare が nil
以外の場合、この関数は文字単位ではなくバイト単位で距離を計算します。バイト単位の比較には文字の Emacs
内部表現が使用されるため、生バイトを含むマルチバイト文字列では不正確な結果となります(テキスト表現を参照)。生バイトを含む正確な結果が必要な場合は、エンコードして文字列をユニバイト形式にしてください(明示的なエンコードとデコードを参照)。
この関数は assoc と同様に動作しますが、key
は文字列またはシンボルである必要があり、比較には compare-strings
が使用されます。シンボルは判定前に文字列に変換されます。case-fold が nil 以外の場合、key および alist の要素は比較前に大文字に変換されます。assoc
とは異なり、この関数ではアリストの要素として、コンスではなく文字列やシンボルを指定することも可能です。特に、alist は実際のアリストではなく、文字列やシンボルのリストを指定できます。アソシエーションリスト を参照してください。
バッファ内のテキストを比較する方法については、テキストの比較にある関数 compare-buffer-substrings も参照してください。文字列に対して正規表現を照合する関数
string-match は、ある種の文字列比較に利用できます。詳細は 正規表現による検索 を参照してください。
照合規則とそのロケール依存性の詳細については、Unicode照合アルゴリズムを参照してください。GNU Cライブラリ(別名 glibc)などの一部の標準Cライブラリは、Unicode照合アルゴリズムの大部分を実装しており、関連するロケールデータであるCommon Locale Data Repository(CLDR)を利用しています。