Co je regex, který odpovídá znaku nového řádku?

V Emacs regex \n neodpovídá znaku nového řádku \n.

  1. Opravuji, že $ odpovídá pozici mezi znakem nového řádku a znakem těsně před znakem nového řádku. např. pro řetězec abc\n odpovídá $ pozici mezi c a \n?
  2. Co je regex, který odpovídá \n?

Komentáře

  • Můžete uvést minimální funkční příklad? Možná mi ' něco chybí, ale (re-search-forward "\n") funguje mi dobře.
  • Váš soubor může používat \ r \ n pro nové řádky a je možné, že musíte do svého regexp zahrnout \ r, takže abc\r\n místo abc\n.
  • @Dan: CMs a Mx vyskytují se oba \n do n. můj buffer je v základním režimu. To se stane s jakýmkoli textem, takže jakýkoli text s novým řádkem nebo písmenem n je fungujícím příkladem
  • @Jordon: CMs a Mx se vyskytují shodně \r\n do rn
  • @Tim, ano, protože pokud je zadáváte interaktivně, ' d je třeba udělat citované vložky, Cq Cm a Cq Cj. Můžete je zadat \ r \ n, pokud je zadáváte do řetězce lisp.

Odpovědět

  1. Ano. $ odpovídá konci řádku , nikoli znaku nového řádku , který následuje po konci řádku.
  2. Proveďte C-M-s C-q C-j. C-q je výchozí vazba pro quoted-insert a funguje také v minibufferu. Tento výraz doslova hledá nový řádek: C-j.

Komentáře

  • 2. říkáte, že nový znak řádku nelze v Emacs regexu reprezentovat jako únikovou sekvenci?
  • Ať už hledáte nový řádek interaktivně nebo pomocí elispu (např. (looking-at "^J") kde ^ J je vloženo C-q C-j), přístup C-q C-j vždy funguje. Ale když používáte funkce elisp jako stejné looking-at \n, funguje to také; M-: (looking-at "\n") RET bude mít hodnotu true, pokud je kurzor na konci řádku (a poté ' je nový řádek).
  • Stačí zmínit, že pokud používáte regexp-builder, můžete ' rozpoznat nový řádek s [\n].
  • @Nsukami_: CMs and Mx occurs both match [\n] to n.

Odpověď

Jak komentuje Dan, regulární výraz odpovídající novému řádku je nový řádek .

Nový řádek v citovaném řetězci můžete v elispu reprezentovat jako "\n". Neexistuje žádná speciální dodatečná syntaxe specifická pro regexp – stačí použít nový řádek, přesně jako jakýkoli jiný doslovný znak.

Pokud zadáváte regexp interaktivně pak můžete nový řádek vložit pomocí Cq Cj , jak zdůrazňuje odpověď kaushalmodi.

Komentáře

  • Děkuji! Je v emacsu (nikoli v elispu) Cq Cj jediným způsobem, jak najít nový znak řádku? \n není ' n neodpovídá znaku nového řádku.
  • Ano. Přesněji řečeno, psaní nového řádku je jediný způsob, jak při zadání znaku nového řádku odpovídat znaku nového řádku regexp interaktivně (protože pro nový řádek neexistuje žádná úniková sekvence regexp) a C-q C-j je nejspolehlivější způsob, jak do řádku zadat nový řádek.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *