Jakie jest wyrażenie regularne, aby dopasować znak nowej linii?

W wyrażeniu regularnym Emacsa \n nie pasuje do znaku nowego wiersza \n.

  1. Czy mam rację, że $ dopasowuje pozycję między znakiem nowej linii a znakiem tuż przed znakiem nowej linii. np. dla ciągu znaków abc\n, $ odpowiada pozycji między c a \n?
  2. Jakie wyrażenie regularne pasuje do \n?

Komentarze

  • Czy możesz podać minimalny działający przykład? Może ' czegoś brakuje, ale (re-search-forward "\n") dla mnie działa dobrze.
  • Twój plik może używać \ r \ n dla nowych wierszy i być może będziesz musiał uwzględnić \ r w swoim wyrażeniu regularnym, więc abc\r\n zamiast abc\n.
  • @Dan: CMs i Mx występują zarówno zgodnie z \n do n. 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.
  • @Jordon: CM i Mx występują zarówno w przypadku \r\n to rn
  • @Tim, tak, ponieważ jeśli wprowadzasz je interaktywnie, ' d trzeba wykonać wstawienia w cudzysłowie, odpowiednio Cq Cm i Cq Cj. Możesz wpisać \ r \ n, jeśli wpisujesz je w ciągu lisp.

Odpowiedź

  1. Tak. $ dopasowuje koniec wiersza , a nie znak nowej linii , który występuje po końcu wiersza.
  2. Wykonaj C-M-s C-q C-j. C-q jest domyślnym powiązaniem dla quoted-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 przez C-q C-j), podejście C-q C-j zawsze działa. Ale gdy używasz funkcji elisp, takich jak te same looking-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] do n.

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.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *