Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

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

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

(setq test-str "abcdefg  ")
(when (string-match "[ \t]*$" test-str)
    (message (concat "[" (replace-match "" nil nil test-str) "]")))

Ответ 2

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

Ответ 3

Чтобы заменить каждое регулярное выражение в строке, посмотрите replace-regexp-in-string.

Ответ 4

Чтобы начать поиск строки

(defun string-starts-with-p (string prefix)
    "Return t if STRING starts with PREFIX."
    (and
     (string-match (rx-to-string `(: bos ,prefix) t)
                   string)
     t))

Чтобы найти конец строки

(defun string-ends-with-p (string suffix)
  "Return t if STRING ends with SUFFIX."
  (and (string-match (rx-to-string `(: ,suffix eos) t)
                     string)
       t))