Spec-Zone.ru › Elisp

Доступ к данным всего совпадения

Функции match-data и set-match-data считывают или записывают все данные совпадения сразу.

Функция: match-data &optional integers reuse reseat

Эта функция возвращает список позиций (маркеров или целых чисел), которые записывают всю информацию о тексте, с которым совпало последнее поиск. Элемент с индексом ноль — позиция начала совпадения для всего выражения; элемент с индексом один — позиция конца совпадения для выражения. Следующие два элемента — позиции начала и конца совпадения для первого подвыражения и так далее. В общем случае элемент с номером 2n соответствует (match-beginning n); а элемент с номером 2n + 1 соответствует (match-end n).

Обычно все элементы являются маркерами или nil, но если integers не nil, это означает использование целых чисел вместо маркеров. (В этом случае буфер сам добавляется как дополнительный элемент в конец списка для облегчения полного восстановления данных совпадения.) Если последнее совпадение было выполнено со строкой с string-match, целые числа всегда используются, поскольку маркеры не могут указывать на позиции внутри строки.

Если reuse не nil, это должен быть список. В этом случае match-data сохраняет данные совпадения в reuse. То есть, reuse изменяется разрушающим образом. reuse не обязательно должен иметь правильную длину. Если он недостаточно длинный, чтобы содержать данные совпадения, он расширяется. Если он слишком длинный, длина reuse остается прежней, но элементы, которые не были использованы, устанавливаются в nil. Цель этой функции — уменьшить потребность в сборке мусора.

Если reseat не nil, все маркеры в списке reuse переустанавливаются на указание ни на что.

Как всегда, не должно быть возможности проведения промежуточных поисков между вызовом функции поиска и вызовом match-data, предназначенным для доступа к данным совпадения для этого поиска.

(match-data)
     ⇒  (#<marker at 9 in foo>
          #<marker at 17 in foo>
          #<marker at 13 in foo>
          #<marker at 17 in foo>)
Функция: set-match-data match-list &optional reseat

Эта функция устанавливает данные совпадения из элементов match-list, который должен быть списком, являющимся значением предыдущего вызова match-data. (Точнее, подойдет всё, имеющее тот же формат.)

Если match-list ссылается на буфер, которого не существует, ошибка не возникает; это устанавливает данные совпадения бессмысленным, но безопасным способом.

Если reseat не nil, все маркеры в списке match-list переустанавливаются на указание ни на что.

store-match-data — это полузабытый псевдоним для set-match-data.

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/Entire-Match-Data.html

Spec-Zone.ru

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