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ędzyc
a\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-q
jest domyślnym powiązaniem dlaquoted-insert
i 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-j
zawsze działa. Ale gdy używasz funkcji elisp, takich jak te samelooking-at
\n
, działa też;M-: (looking-at "\n") RET
zmieni 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?
\n
nie ' 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-j
to najbardziej niezawodny sposób na wpisanie nowej linii po znaku zachęty.
(re-search-forward "\n")
dla mnie działa dobrze.abc\r\n
zamiastabc\n
.\n
don
. mój bufor jest w trybie podstawowym. Dzieje się tak z każdym tekstem, więc każdy tekst z nową linią lub literąn
jest działającym przykładem.\r\n
torn