Сравнение символов и строк
- Функция: 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= string1 string2
-
Эта функция возвращает
tесли символы двух строк точно совпадают. Символы также допускаются в качестве аргументов, в этом случае используются имена символов. Регистр всегда учитывается, независимо отcase-fold-search.Эта функция эквивалентна
equalдля сравнения двух строк (см. Предикаты равенства). В частности, свойства текста двух строк игнорируются; используйте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 остаются неизменными. Таким образом, однобайтовая строка и её преобразование в многобайтовую являютсяequalтолько если строка состоит целиком из символов ASCII. Коды символов от 160 до 255 не являются полностью корректными в многобайтовом тексте, хотя они могут встречаться. Вследствие этого, ситуация, когда однобайтовая и многобайтовая строки являютсяequalбез того, чтобы обе были полностью ASCII, является техническим нюансом, с которым очень немногие программисты Emacs Lisp когда-либо сталкиваются. См. Представления текста.
- Функция: string-equal string1 string2
string-equal— другое название дляstring=.
- Функция: string-collate-equalp string1 string2 &optional locale ignore-case
-
Эта функция возвращает
tесли string1 и string2 равны с точки зрения правил сортировки. Правило сортировки определяется не только лексикографическим порядком символов, содержащихся в string1 и string2, но и дополнительными правилами о взаимоотношениях между этими символами. Обычно оно определяется средой locale, в которой работает Emacs, и стандартной библиотекой C, к которой был подключен Emacs3.Например, символы с различными кодами, но одинаковым значением, такие как различные символы акцентов с помощью диэреза в Юникоде, в некоторых локалях могут считаться равными:
(string-collate-equalp (string ?\uFF40) (string ?\u1FEF)) ⇒ tНеобязательный аргумент locale, строка, переопределяет значение текущего идентификатора локали для сортировки. Значение зависит от системы; locale
"en_US.UTF-8"применяется на системах POSIX, в то время как на системах MS-Windows он будет, например,"enu_USA.1252".Если ignore-case не
nil, символы преобразуются в нижний регистр перед сравнением.Для эмуляции совместимого с Юникодом порядка сортировки на системах MS-Windows установите
w32-collate-ignore-punctuationв значение, отличное отnil, поскольку кодовая часть локали не может быть"UTF-8"на системах MS-Windows.Если ваша система не поддерживает среду локали, эта функция ведет себя как
string-equal.Не используйте эту функцию для сравнения имён файлов на равенство, так как файловые системы обычно не учитывают лингвистическое соответствие строк, которое реализует сортировка.
- Функция: string< string1 string2
-
Эта функция сравнивает две строки посимвольно. Она сканирует обе строки одновременно, чтобы найти первую пару соответствующих символов, которые не совпадают. Если меньший символ из этих двух принадлежит string1, то string1 меньше, и эта функция возвращает
t. Если меньший символ принадлежит string2, то string1 больше, и эта функция возвращаетnil. Если две строки полностью совпадают, значение равноnil.Пары символов сравниваются по своим кодам символов. Имейте в виду, что строчные буквы имеют более высокие числовые значения в наборе символов ASCII, чем их прописные аналоги; цифры и многие знаки препинания имеют более низкие числовые значения, чем прописные буквы. Символ ASCII меньше любого символа, не являющегося ASCII; однобайтовый символ, не являющийся ASCII, всегда меньше любого многобайтового символа, не являющегося ASCII (см. Представления текста).
(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 string1 string2
string-lessp— другое название дляstring<.
- Функция: string-greaterp string1 string2
Эта функция возвращает результат сравнения string1 и string2 в обратном порядке, т.е., она эквивалентна вызову
(string-lessp string2 string1).
- Функция: string-collate-lessp string1 string2 &optional locale ignore-case
-
Эта функция возвращает
tесли string1 меньше string2 в порядке сортировки. Порядок сортировки определяется не только лексикографическим порядком символов, содержащихся в string1 и string2, но и дополнительными правилами о взаимоотношениях между этими символами. Обычно он определяется средой locale, в которой работает Emacs.Например, знаки препинания и пробелы могут быть проигнорированы при сортировке (см. Функции последовательностей):
(sort (list "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
"en_US.UTF-8"применяется на системах POSIX, в то время как на системах MS-Windows он будет, например,"enu_USA.1252". Значение locale"POSIX"или"C"позволяетstring-collate-lesspвести себя какstring-lessp:(sort (list "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 установите
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, поиск начинается с этой позиции в needle. Возвращает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, которые являются строками или символами, а не консами. В частности, alist может быть списком строк или символов, а не фактическим списком ассоциаций. См. Списки ассоциаций.
См. также функцию compare-buffer-substrings в Сравнение текста, чтобы сравнивать текст в буферах. Функция string-match, которая сопоставляет регулярное выражение со строкой, может быть использована для определённого вида сравнения строк; см. Поиск по регулярным выражениям.
Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Text-Comparison.html