elisp regexp ищут в строках, не буферах

Я искал везде в документации шепелявости emacs для как к поиску регулярных выражений в строку. Все, что я нахожу, - то, как сделать это в буферах.

Есть ли что-то, что я пропускаю? Я должен просто плюнуть своей строкой во временный буфер и искать ее там? Это - просто стиль кодирования elisp, что-то, к чему я привыкну? Есть ли стандартное решение этой проблемы. Управление буферами кажется cludgy, когда я должен просто смочь искать прямо в переменную, уже представляют.

41
задан Eli 19 July 2010 в 04:53
поделиться

2 ответа

Вот обсуждение содержимого строки по сравнению с содержимым буфера в Emacs wiki. Просто храните вашу строку как переменную.

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

Во всяком случае, вот пример использования строки в elisp.

Это обрезает пробелы в конце строки:

(setq test-str "abcdefg  ")
(when (string-match "[ \t]*$" test-str)
    (message (concat "[" (replace-match "" nil nil test-str) "]")))
28
ответ дан 27 November 2019 в 00:53
поделиться

Функция, которую вы ищете - string-match. Если вам нужно выполнять поиск неоднократно, используйте индекс, который она возвращает, в качестве необязательного параметра "start" для следующего вызова. Документация находится в руководстве по ELisp, глава "Поиск по регулярным выражениям".

12
ответ дан 27 November 2019 в 00:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: