Spec-Zone.ru › Elisp

Сравнение символов и строк

Функция: 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 если совпадения не найдено. Эта функция учитывает только символы в строках при сравнении; свойства текста игнорируются. Сопоставление всегда регистрозависимое.

END_OF_DOCUMENT_MARKER
Функция: 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API