Эта функция возвращает t, если аргументы представляют один и тот же
символ, и nil в противном случае. Эта функция игнорирует различия
в регистре, если case-fold-search не равен nil.
(char-equal ?x ?x)
⇒ t
(let ((case-fold-search nil))
(char-equal ?x ?X))
⇒ nil
Эта функция возвращает t, если символы двух строк
совпадают в точности. Также допускаются символы в качестве аргументов, в
случае чего используются имена символов. Регистр всегда имеет значение,
независимо от case-fold-search.
Эта функция эквивалентна equal для сравнения двух строк
(см. Предикаты равенства). В частности,
игнорируются текстовые свойства двух строк; используйте 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 сравнивает строки, игнорируя различия
в регистре, подобно char-equal, когда case-fold-search
равен t.
Эта функция возвращает t, если string1 и string2
равны с точки зрения правил сопоставления указанного locale, который
по умолчанию соответствует локали вашей текущей системы. Правило сопоставления
определяется не только лексическим порядком символов, содержащихся в
string1 и string2, но и дополнительными правилами
отношений между этими символами. Обычно оно определяется средой локали, в которой
работает Emacs, и стандартной библиотекой C, с которой был скомпонован Emacs4.
Например, символы с разными кодовыми точками, но одинаковым смыслом, такие как разные символы с гравис-акцентом Unicode, могут в некоторых локалиях считаться равными:
(string-collate-equalp (string ?\uFF40) (string ?\u1FEF))
⇒ t
Необязательный аргумент locale, строка, переопределяет
установку идентификатора вашей текущей локали для сопоставления. Значение
зависит от системы; locale "en_US.UTF-8"
применимо в системах POSIX, в то время как в системах MS-Windows это может быть,
например, "enu_USA.1252".
Если ignore-case не равен nil, символы сравниваются
без учета регистра путем преобразования их в нижний регистр. Однако, если
базовая системная библиотека не предоставляет правила сопоставления, специфичные
для локали, эта функция возвращается к string-equal, в
случае чего аргумент ignore-case игнорируется, и сравнение
всегда будет чувствительным к регистру.
Чтобы эмулировать сопоставление, соответствующее Unicode, в системах MS-Windows,
привяжите w32-collate-ignore-punctuation к значению, не
равному nil, поскольку часть кодировки локали в MS-Windows не может
быть "UTF-8".
Если ваша система не поддерживает среду локали, эта функция ведет себя как
string-equal.
Не используйте эту функцию для сравнения имен файлов на равенство, поскольку файловые системы, как правило, не учитывают лингвистическое эквивалентное сравнение строк, которое реализует сопоставление.
Эта функция сравнивает две строки символ за символом. Она одновременно
сканирует обе строки, чтобы найти первую пару соответствующих символов, которые
не совпадают. Если меньший из этих двух символов является символом из
string1, то string1 меньше, и эта
функция возвращает t. Если меньший символ — из
string2, то string1 больше, и эта
функция возвращает nil. Если две строки полностью совпадают,
значение равно nil.
Пары символов сравниваются в соответствии с их кодами символов. Имейте в виду, что строчные буквы имеют более высокие числовые значения в наборе символов ASCII, чем их заглавные аналоги; цифры и многие знаки препинации имеют более низкое числовое значение, чем заглавные буквы. Символ ASCII меньше любого не-ASCII символа; однобайтовый не-ASCII символ всегда меньше любого многобайтового не-ASCII символа (см. Представления текста).
(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.
Эта функция возвращает t, если string1 меньше
string2 в порядке сопоставления указанной locale, который
по умолчанию соответствует локали вашей текущей системы. Порядок сопоставления
определяется не только лексическим порядком символов, содержащихся в
string1 и string2, но и дополнительными правилами
отношений между этими символами. Обычно он определяется средой локали, в которой
работает Emacs, и стандартной библиотекой C, с которой был скомпонован Emacs.
Например, знаки препинания и пробельные символы могут игнорироваться при сортировке (см. Последовательности):
(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, строка, переопределяет
установку идентификатора вашей текущей локали для сопоставления. Значение
зависит от системы; locale "en_US.UTF-8"
применимо в системах POSIX, в то время как в системах 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 игнорируется, и сравнение
всегда будет чувствительным к регистру.
Чтобы эмулировать сопоставление, соответствующее Unicode, в системах MS-Windows,
привяжите w32-collate-ignore-punctuation к значению, не
равному nil, поскольку часть кодировки локали в MS-Windows не может
быть "UTF-8".
Если ваша система не поддерживает среду локали, эта функция ведет себя как
string-lessp.
Эта функция сравнивает строки лексикографически, за исключением того, что она обрабатывает последовательности числовых символов как десятичное число, а затем сравнивает эти числа. Таким образом, ‘foo2.png’ считается “меньше” чем ‘foo12.png’ в соответствии с этим предикатом, даже если ‘12’ лексикографически “меньше” чем ‘2’.
Эта функция возвращает не-nil, если string1 является
префиксом string2; то есть, если string2 начинается с
string1. Если необязательный аргумент ignore-case
не равен nil, сравнение игнорирует различия в регистре.
Эта функция возвращает не-nil, если suffix является
суффиксом string; то есть, если string заканчивается на
suffix. Если необязательный аргумент ignore-case
не равен nil, сравнение игнорирует различия в регистре.
Возвращает позицию первого вхождения needle в
haystack, причем оба являются строками. Если start-pos
не равен nil, начинать поиск с этой позиции в haystack.
Возвращает nil, если совпадение не найдено.
Эта функция учитывает только символы в строках при сравнении; текстовые свойства
игнорируются. Совпадение всегда чувствительно к регистру.
Эта функция сравнивает указанную часть string1 с
указанной частью string2. Указанная часть string1
начинается с индекса start1 (включительно) до индекса end1
(исключительно); nil для start1 означает начало
строки, а nil для end1 означает длину строки.
Точно так же, указанная часть string2 начинается с индекса
start2 до индекса end2.
Строки сравниваются по числовым значениям их символов. Например, str1
считается меньше, чем str2, если ее первый различающийся символ имеет
меньшее числовое значение. Если ignore-case не равен nil,
символы преобразуются в верхний регистр, используя таблицу регистра текущего буфера
(см. Таблица регистра), перед сравнением.
Однобайтовые строки преобразуются в многобайтовые для сравнения (см. Представления текста),
так что однобайтовая строка и ее преобразование в многобайтовую всегда считаются
равными.
Если указанные части двух строк совпадают, значение равно t.
В противном случае значение — это целое число, которое указывает, сколько
ведущих символов совпадают, и какая строка меньше. Его абсолютное значение
равно одному плюс количество совпадающих символов в начале двух строк. Знак
отрицательный, если string1 (или ее указанная часть) меньше.
Эта функция возвращает расстояние Левенштейна между исходной строкой string1 и целевой строкой string2. Расстояние Левенштейна — это количество односимвольных изменений — удалений, вставок или замен — необходимых для преобразования исходной строки в целевую; это возможное определение расстояния редактирования между строками.
Регистр букв строк важен для вычисленного расстояния, но их текстовые
свойства игнорируются. Если необязательный аргумент bytecompare
не равен nil, функция вычисляет расстояние в терминах байтов,
а не символов. Байтовое сравнение использует внутреннее представление Emacs
символов, поэтому оно может давать неточные результаты для многобайтовых
строк, содержащих необработанные байты (см. Представления текста);
сделайте строки однобайтовыми, закодировав их (см. Явное кодирование и декодирование),
если вам нужны точные результаты с необработанными байтами.
Эта функция работает как assoc, за исключением того, что
key должен быть строкой или символом, а сравнение выполняется
с использованием compare-strings. Символы преобразуются в строки
перед проверкой.
Если case-fold не равен nil, key и
элементы alist преобразуются в верхний регистр перед сравнением.
В отличие от assoc, эта функция также может сопоставлять
элементы alist, которые являются строками или символами, а не консами. В частности,
alist может быть списком строк или символов, а не фактическим alist.
См. Списки ассоциаций.
См. также функцию compare-buffer-substrings в
Сравнение текста для способа сравнения
текста в буферах. Функция string-match, которая сопоставляет
регулярное выражение со строкой, может использоваться для некоторого вида
сравнения строк; см. Поиск по регулярным выражениям.
Для получения дополнительной информации о правилах сопоставления и их зависимостях от локали см. Алгоритм сопоставления Unicode. Некоторые стандартные библиотеки C, такие как GNU C Library (также известная как glibc), реализуют большую часть Алгоритма сопоставления Unicode и используют связанные данные локали, Репозиторий общих данных локали, или CLDR.