Сравнение символов и строк
- Функция: char-equal character1 character2
-
Эта функция возвращает
t, если аргументы обозначают один и тот же символ, иnilв противном случае. Эта функция игнорирует различия в регистре, еслиcase-fold-searchне равноnil.(char-equal ?x ?x) ⇒ t (let ((case-fold-search nil)) (char-equal ?x ?X)) ⇒ nil
- Функция: string-equal string1 string2
-
Эта функция возвращает
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= string1 string2
string=— другое имя дляstring-equal.
- Функция: string-equal-ignore-case string1 string2
string-equal-ignore-caseсравнивает строки, игнорируя различия в регистре, подобноchar-equal, когдаcase-fold-searchравноt.
- Функция: string-collate-equalp string1 string2 &optional locale ignore-case
-
Эта функция возвращает
t, если string1 и string2 равны согласно правилам сортировки указанной локали locale, по умолчанию соответствующей текущей системной локали. Правило сортировки определяется не только лексикографическим порядком символов в string1 и string2, но и дополнительными правилами, учитывающими отношения между этими символами. Обычно оно определяется локалью, в которой работает Emacs, и стандартной библиотекой C, с которой был скомпонован Emacs.Например, символы с разными кодовыми точками, но одинаковым значением, такие как различные символы 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, поскольку часть локали, задающая кодировку, не может быть"UTF-8"в MS-Windows.Если ваша система не поддерживает среду локали, эта функция работает как
string-equal.Не используйте эту функцию для сравнения имен файлов на равенство, поскольку файловые системы обычно не учитывают лингвистическую эквивалентность строк, которую реализует сортировка.
- Функция: string-lessp string1 string2
-
Эта функция сравнивает две строки посимвольно. Она просматривает обе строки одновременно, чтобы найти первую пару соответствующих друг другу несовпадающих символов. Если меньший из этих символов находится в string1, то string1 меньше, и функция возвращает
t. Если меньший символ находится в string2, то string1 больше, и функция возвращаетnil. Если строки полностью совпадают, возвращаетсяnil.Пары символов сравниваются по их кодам. Помните, что в наборе символов 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< string1 string2
string<— другое имя дляstring-lessp.
- Функция: string-greaterp string1 string2
Эта функция возвращает результат сравнения string1 и string2 в обратном порядке, то есть эквивалентна вызову
(string-lessp string2 string1).
- Функция: string> string1 string2
string>— другое имя дляstring-greaterp.
- Функция: string-collate-lessp string1 string2 &optional locale ignore-case
-
Эта функция возвращает
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, поскольку часть локали, задающая кодировку, не может быть"UTF-8"в MS-Windows.Если ваша система не поддерживает среду локали, эта функция работает как
string-lessp.
- Функция: string-version-lessp string1 string2
Эта функция сравнивает строки лексикографически, за исключением того, что последовательности цифр рассматривает как десятичные числа и сравнивает числовые значения. Поэтому согласно этому предикату ‘foo2.png’ «меньше», чем ‘foo12.png’, даже если ‘12’ лексикографически «меньше», чем ‘2’.
- Функция: string-prefix-p string1 string2 &optional ignore-case
Эта функция возвращает значение, не равное
nil, если string1 является префиксом string2, то есть если string2 начинается с string1. Если необязательный аргумент ignore-case не равенnil, при сравнении игнорируются различия в регистре.
- Функция: string-suffix-p suffix string &optional ignore-case
Эта функция возвращает значение, не равное
nil, если suffix является суффиксом string, то есть если string заканчивается на suffix. Если необязательный аргумент ignore-case не равенnil, при сравнении игнорируются различия в регистре.
- Функция: string-search needle haystack &optional start-pos
Возвращает позицию первого вхождения needle в haystack; оба аргумента должны быть строками. Если start-pos не равен
nil, поиск начинается с этой позиции в haystack. Если совпадение не найдено, возвращаетnil. При сравнении эта функция учитывает только символы строк; текстовые свойства игнорируются. Сравнение всегда учитывает регистр.
- Функция: compare-strings string1 start1 end1 string2 start2 end2 &optional ignore-case
-
Эта функция сравнивает заданную часть string1 с заданной частью string2. Заданная часть string1 начинается с индекса start1 (включительно) и заканчивается перед индексом end1 (не включительно);
nilдля start1 означает начало строки, аnilдля end1 означает длину строки. Аналогично, заданная часть string2 начинается с индекса start2 и заканчивается перед индексом end2.Строки сравниваются по числовым значениям их символов. Например, str1 считается меньше str2, если первый различающийся символ имеет меньшее числовое значение. Если ignore-case не равен
nil, перед сравнением символы преобразуются в верхний регистр с использованием таблицы регистра текущего буфера (см. Таблица регистра). Однобайтовые строки преобразуются в многобайтовые для сравнения (см. Представления текста), поэтому однобайтовая строка и ее многобайтовое представление всегда считаются равными.Если указанные части обеих строк совпадают, возвращается
t. В противном случае возвращается целое число, которое указывает, сколько начальных символов совпадает, а также какая строка меньше. Абсолютное значение числа на единицу больше количества совпадающих начальных символов двух строк. Число отрицательное, если string1 (или указанная ее часть) меньше.
- Функция: string-distance string1 string2 &optional bytecompare
-
Эта функция возвращает расстояние Левенштейна между исходной строкой string1 и целевой строкой string2. Расстояние Левенштейна — это число изменений отдельных символов — удалений, вставок или замен, — необходимых для преобразования исходной строки в целевую; это один из возможных способов определить расстояние редактирования между строками.
Регистр букв учитывается при вычислении расстояния, но текстовые свойства игнорируются. Если необязательный аргумент bytecompare не равен
nil, функция вычисляет расстояние в байтах, а не в символах. Побайтовое сравнение использует внутреннее представление символов в Emacs, поэтому результаты будут неточными для многобайтовых строк, содержащих необработанные байты (см. Представления текста); если для необработанных байтов нужны точные результаты, сделайте строки однобайтовыми, закодировав их (см. Явное кодирование и декодирование).
- Функция: assoc-string key alist &optional case-fold
Эта функция работает как
assoc, за исключением того, что key должен быть строкой или символом, а сравнение выполняется с помощьюcompare-strings. Перед проверкой символы преобразуются в строки. Если case-fold не равенnil, перед сравнением key и элементы alist преобразуются в верхний регистр. В отличие отassoc, эта функция также может находить элементы списка ассоциаций, которые являются строками или символами, а не консами. В частности, alist может быть списком строк или символов, а не собственно списком ассоциаций. См. Списки ассоциаций.
См. также функцию compare-buffer-substrings в разделе Сравнение текста, которая позволяет сравнивать текст в буферах. Функцию string-match, сопоставляющую регулярное выражение со строкой, можно использовать для одного из видов сравнения строк; см. Поиск по регулярным выражениям.
Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Text-Comparison.html