функция emacs re -поиск -прямая интерпретация \ (\ )группировка символов буквально в регулярном выражении

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

\"\([^\"]*\)\" 

и вставленный мной NEWTEXT был \1.

* "PROJECT START"
:PROPERTIES:
:ID: 1
:Unique_ID: 17
:DURATION: "0 days"
:TYPE: "Fixed Work"
:OUTLINE_LEVEL: 1
:END:

В интерактивном режиме текст выше был преобразован в текст ниже.

* PROJECT START
:PROPERTIES:
:ID: 1
:Unique_ID: 17
:DURATION: 0 days
:TYPE: Fixed Work
:OUTLINE_LEVEL: 1
:END:

Я попытался выполнить этот же поиск и заменить программно, вставив следующие две строки

(while (re-search-forward "\"\([^\"]*\)\"" nil t)
  (replace-match "\1" nil nil ))

в верхней части буфера и выполняется, но просто возвращает nil, не находя ни одного совпадения.

Когда я опускаю

\( \) 

группировка и заменить \1 на \&

(while (re-search-forward "\"[^\"]*\"" nil t)
  (replace-match "\&" nil nil ))

Я заменяю каждую строку в кавычках на «&».

* &
:PROPERTIES:
:ID: 1
:Unique_ID: 17
:DURATION: &
:TYPE: &
:OUTLINE_LEVEL: 1
:END:

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

Может ли кто-нибудь помочь мне понять, почему группировка и символы \&, \N, \ интерпретируются неправильно?

5
задан ekad 13 March 2017 в 00:35
поделиться