2012-08-12 9 views
5

Pomyślnie użyłem interaktywnej wymiany, aby zastąpić każdą instancję cytowanego tekstu w buforze pokazanym poniżej za pomocą niecedowanej wersji. Wyszukane zapytanie wyglĘ ... dało:Funkcja emacs funkcja ponownego wyszukiwania w przód interpretacja () grupa znaków dosłownie w wyrażeniu

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

, a wstawiony NEWTEXT by \ 1.

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

Interaktywnie tekst aboe został przekształcony w tekst poniżej.

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

starałem się zrobić to samo wyszukiwanie i zastąpić programowo poprzez wstawienie następujące dwa wiersze

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

w górnej części bufora i wykonanie, ale to po prostu wrócił nil bez znalezienia w jednym meczu.

Kiedy pominąć grupowanie

\(\) 

i zastąpić \ 1 z \ &

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

dostaję każdy cudzysłowie zastąpione '&'.

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

Wszystko widziałam w dokumentacji dla obu tych funkcji oznacza, że ​​należy je uznać te znaki specjalne, a także przykłady jego użycia w odpowiedzi na inne pytania na tym forum używać tych znaków specjalnych.

Czy ktoś może mi pomóc zrozumieć, dlaczego znaki grupowania i \ nie są interpretowane poprawnie?

Odpowiedz

7

Musisz uciec z "\" dla "(", ")" i "\ 1". Np .:

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

To naprawiło to. Dziękuję bardzo! – user1593649

+2

Jeśli nie było to jasne, to dlatego, że '' \ '' jest specjalne dla ciągów znaków (a także dla wyrażeń regularnych). Jeśli więc podasz wyrażenie regularne w formacie ciągu znaków, wszelkie ukośniki odwrotne muszą zostać zmienione, w przeciwnym razie wynikiem oceny łańcuchów nie byłby wyraŜony przez ciebie wyraŜenie regularne. – phils

+0

@ user1593649: Nie zapomnij, że możesz zaakceptować odpowiedź, klikając pusty znaczek obok niej. –

Powiązane problemy