W wyrażeniu regularnym Emacsa \n nie pasuje do znaku nowego wiersza \n.
- Czy mam rację, że
$dopasowuje pozycję między znakiem nowej linii a znakiem tuż przed znakiem nowej linii. np. dla ciągu znakówabc\n,$odpowiada pozycji międzyca\n? - Jakie wyrażenie regularne pasuje do
\n?
Komentarze
Odpowiedź
- Tak.
$dopasowuje koniec wiersza , a nie znak nowej linii , który występuje po końcu wiersza. - Wykonaj
C-M-s C-q C-j.C-qjest domyślnym powiązaniem dlaquoted-inserti działa również w minibuforze. To wyrażenie dosłownie wyszukuje znak nowej linii:C-j.
Komentarze
- 2. czy mówisz, że znak nowego wiersza nie może być reprezentowany jako sekwencja ucieczki w wyrażeniu regularnym Emacsa?
- Czy szukasz nowej linii interaktywnie, czy za pomocą elisp (np.
(looking-at "^J")gdzie ^ J jest wstawiane przezC-q C-j), podejścieC-q C-jzawsze działa. Ale gdy używasz funkcji elisp, takich jak te samelooking-at\n, działa też;M-: (looking-at "\n") RETzmieni się na true, jeśli kursor znajduje się na końcu linii (a po nim ' jest nowa linia). - Wystarczy wspomnieć, że jeśli używasz
regexp-builder, ' jesteś w stanie rozpoznać nową linię z[\n]. - @Nsukami_: CM i Mx występują w dopasowaniu
[\n]don.
Odpowiedź
Jak komentuje Dan, wyrażenie regularne pasujące do nowej linii to nowa linia .
Możesz przedstawić nową linię w ciągu znaków w cudzysłowie w elisp jako "\n". Nie ma specjalnej dodatkowej składni specyficznej dla wyrażenia regularnego – wystarczy użyć nowej linii, dokładnie tak, jak każdy inny znak literału.
Jeśli wpisujesz wyrażenie regularne interaktywnie następnie możesz wstawić nową linię za pomocą Cq Cj , jak wskazuje odpowiedź kaushalmodi.
Komentarze
- Dzięki! Czy w emacs (nie w elisp) Cq Cj jest jedynym sposobem dopasowania znaku nowej linii?
\nnie ' t dopasuj znak nowej linii. - Tak. A dokładniej, wpisanie nowej linii jest jedynym sposobem dopasowania znaku nowej linii podczas wprowadzania regexp interaktywnie (ponieważ nie ma sekwencji ucieczki wyrażenia regularnego dla nowej linii), a
C-q C-jto najbardziej niezawodny sposób na wpisanie nowej linii po znaku zachęty.
(re-search-forward "\n")dla mnie działa dobrze.abc\r\nzamiastabc\n.\ndon. mój bufor jest w trybie podstawowym. Dzieje się tak z każdym tekstem, więc każdy tekst z nową linią lub literąnjest działającym przykładem.\r\ntorn