Начало и конец строки в регулярных выражениях Emacs - PullRequest
3 голосов
/ 27 сентября 2011

Что такое символы, обозначающие начало и конец строки с символами новой строки в ней?Я пишу функцию обрезки:

(defun trim (str)
  (if (string-match "^[[:space:]]*\\(.+?\\)[[:space:]]*$" str)
      (match-string 1 str)
      str))

Но со строкой вроде «first / nnext» (полученной из shell-command-to-string) он возвращает только «first».Справочное руководство гласит:

При сопоставлении строки вместо буфера, '^' совпадает в начале строки или после символа новой строки.

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

1 Ответ

4 голосов
/ 27 сентября 2011

Это \\` для начала буфера или строки.И \\' для завершения.См. руководство

Тем не менее, я думаю, что корень вашего разочарования не в якоре.Класс char [:space:] соответствует различным символам на основе текущей таблицы синтаксиса.Для надежного сопоставления с непечатным или печатным символом используйте [:graph:].См. класс символов

Также . не будет соответствовать символам новой строки.

Например,

(let ((str " \n a\nbc \n "))
  (string-match "\\`[^[:graph:]]*\\(\\(?:.\\|\n\\)+?\\)[^[:graph:]]*\\'" str)
  (match-string 1 str))
...