In Emacs regex stimmt \n
nicht mit einem neuen Zeilenzeichen überein \n
.
- Stimmt es, dass
$
mit der Position zwischen einem neuen Zeilenzeichen und dem Zeichen direkt vor dem neuen Zeilenzeichen übereinstimmt, z Für eine Zeichenfolgeabc\n
stimmt$
mit der Position zwischenc
und ? - Wie lautet der reguläre Ausdruck, der mit
\n
übereinstimmt?
Kommentare
- Könnten Sie ein Mindestarbeitsbeispiel angeben? Vielleicht fehlt mir ' etwas, aber
(re-search-forward "\n")
funktioniert gut für mich. - Ihre Datei verwendet möglicherweise \ r \ n für neue Zeilen und es kann sein, dass Sie \ r in Ihren regulären Ausdruck aufnehmen müssen, also
abc\r\n
anstelle vonabc\n
. - @Dan: CMs und Mx treten beide mit
\n
auf zun
. Mein Puffer befindet sich im Grundmodus. Dies passiert mit jedem Text, daher ist jeder Text mit einer neuen Zeile oder einem neuen Buchstabenn
ein funktionierendes Beispiel. - @Jordon: CMs und Mx treten beide mit
\r\n
bisrn
- @Tim, ja, denn wenn Sie sie interaktiv eingeben, ' d muss in Anführungszeichen gesetzt werden, Cq Cm bzw. Cq Cj. Sie können \ r \ n eingeben, wenn Sie sie in eine Lisp-Zeichenfolge eingeben.
Antwort
- Ja.
$
entspricht dem Zeilenende und nicht dem Zeilenumbruchzeichen , das nach dem Zeilenende steht. - Führen Sie
C-M-s C-q C-j
aus.C-q
ist die Standardbindung fürquoted-insert
und funktioniert auch im Minibuffer. Dieser Ausdruck sucht buchstäblich nach einer neuen Zeile:C-j
.
Kommentare
- 2. Wollen Sie damit sagen, dass das neue Zeilenzeichen in Emacs Regex nicht als Escape-Sequenz dargestellt werden kann?
- Ob interaktiv oder über elisp nach einer neuen Zeile gesucht wird (z. B.
(looking-at "^J")
where ^ J wird durchC-q C-j
) eingefügt. Der AnsatzC-q C-j
funktioniert immer. Bei Verwendung von elisp-Funktionen wielooking-at
\n
funktioniert dies jedoch auch.M-: (looking-at "\n") RET
wird auf true ausgewertet, wenn sich der Cursor am Ende der Zeile befindet (und danach ' eine neue Zeile). - Nur um zu erwähnen, wenn Sie
regexp-builder
verwenden, können Sie ' eine neue Zeile mit . - @Nsukami_: CMs und Mx treten beide in Übereinstimmung mit
[\n]
mitn
auf.
Antwort
Wie Dan kommentiert, ist der reguläre Ausdruck, der einer neuen Zeile entspricht, eine neue Zeile
Sie können eine neue Zeile in einer Zeichenfolge in Anführungszeichen in elisp als "\n"
darstellen. Hierfür gibt es keine spezielle zusätzliche Regexp-spezifische -Syntax. Sie verwenden lediglich eine neue Zeile, genau wie jedes andere Literalzeichen.
Wenn Sie interaktiv einen Regexp eingeben dann können Sie die neue Zeile mit Cq Cj einfügen, wie die Antwort von kaushalmodi zeigt.
Kommentare
- Danke! Ist Cq Cj in Emacs (nicht in Elisp) die einzige Möglichkeit, einem neuen Zeilenzeichen zu entsprechen?
\n
nicht ' passt nicht zu einem neuen Zeilenzeichen. - Ja. Nun, genauer gesagt, das Eingeben einer neuen Zeile ist die einzige Möglichkeit, einem neuen Zeilenzeichen bei der Eingabe eines zu entsprechen Regexp interaktiv (da es für eine neue Zeile keine Regexp-Escape-Sequenz gibt) und
C-q C-j
ist die zuverlässigste Methode, um eine neue Zeile an einer Eingabeaufforderung einzugeben.