Co to jest wyrażenie pasujące do znaku nowej linii?

22

W wyrażeniu regularnym Emacsa \nnie pasuje do nowego znaku linii \n.

  1. Czy mam rację, że $dopasowuje pozycję między nowym znakiem linii a znakiem tuż przed nowym znakiem linii. np. dla łańcucha abc\n, $dopasowuje pozycję pomiędzy ci \n?
  2. Jakie wyrażenie regularne pasuje \n?
StackExchange dla wszystkich
źródło
2
Czy możesz podać minimalny przykład działania? Może czegoś mi brakuje, ale (re-search-forward "\n")działa dobrze dla mnie.
Dan
1
Twój plik może używać \ r \ n dla nowych wierszy i może być konieczne, że musisz uwzględnić \ r w wyrażeniu regularnym, więc abc\r\nzamiast abc\n.
Jordon Biondo,
@Dan: CMS i Mx występować zarówno dopasowanie \ndo n. mój bufor jest w trybie podstawowym. Dzieje się tak z każdym tekstem, więc dowolny tekst z nową linią lub literą njest działającym przykładem
StackExchange dla wszystkich
@Jordon: CMS i Mx występować zarówno dopasowanie \r\ndorn
Stack Exchange Network dla All
@Tim, tak, ponieważ jeśli wprowadzasz je interaktywnie, musisz wykonać wstawiane cytaty, odpowiednio Cq Cm i Cq Cj. Możesz wpisać \ r \ n, jeśli wprowadzasz je w łańcuch lisp.
Jordon Biondo

Odpowiedzi:

19
  1. Tak. $dopasowuje koniec linii , a nie znak nowej linii, który pojawia się za końcem linii.
  2. Zrobić C-M-s C-q C-j. C-qjest domyślnym powiązaniem quoted-inserti działa również w minibuforze. To wyrażenie dosłownie szuka nowej linii: C-j.
Kaushal Modi
źródło
1
2. czy mówisz, że nowy znak linii nie może być reprezentowany jako sekwencja Escape w wyrażeniu regularnym Emacsa?
StackExchange dla wszystkich
3
Bez względu na to, czy wyszukiwanie nowego wiersza odbywa się interaktywnie, czy przez elisp (np. (looking-at "^J")Gdzie wstawiono ^ JC-q C-j ), C-q C-jpodejście zawsze działa. Ale kiedy używasz funkcji elisp, to samo looking-at \ndziała; M-: (looking-at "\n") RETzmieni się na prawdę, jeśli kursor znajdzie się na końcu linii (a po niej pojawi się nowa linia).
Kaushal Modi
2
Wystarczy wspomnieć, że jeśli używasz regexp-builder, możesz rozpoznać nową linię za pomocą [\n].
Nsukami _
@Nsukami_: CMS i Mx występować zarówno dopasowanie [\n]do n.
StackExchange dla wszystkich
13

Jak komentuje Dan, wyrażenie pasujące do nowej linii jest nową linią.

Możesz reprezentować nowy wiersz w cytowanym ciągu w elisp jako "\n". Nie ma w tym celu specjalnej dodatkowej składni specyficznej dla wyrażeń regularnych - po prostu używasz nowego wiersza, dokładnie tak jak każdego innego literalnego znaku.

Jeśli wpisujesz wyrażenie regularne interaktywnie , możesz wstawić nowy wiersz za pomocą C-qC-j, jak wskazuje odpowiedź kaushalmodi.

phils
źródło
1
Dzięki! Czy w emacs (nie w elisp) Cq Cj jest jedynym sposobem na dopasowanie nowego znaku linii? \nnie pasuje do nowego znaku linii.
StackExchange dla wszystkich
1
Tak. Cóż, a dokładniej, wpisanie nowej linii jest jedynym sposobem dopasowania znaku nowej linii podczas interaktywnego wprowadzania wyrażenia regularnego (ponieważ nie ma sekwencji ucieczki wyrażenia regularnego dla nowej linii) i C-q C-jjest najbardziej niezawodnym sposobem na wpisanie nowej linii po znaku zachęty.
phils