Das Handbuch beschreibt die regulären Sonderzeichen ^
und $
. Wie in den meisten mir bekannten Dialekten mit regulären Ausdrücken scheinen sie mit dem Anfang oder Ende einer Zeichenfolge übereinzustimmen. Ich habe aber auch festgestellt, dass es `
und '
Charaktere gibt. Basierend auf der hier gefundenen Erklärung scheinen sie auch mit dem Anfang oder Ende von Zeichenfolgen übereinzustimmen. Könnte jemand bitte den Unterschied zwischen diesen Sonderzeichen erklären, mit einem Beispiel und einer Empfehlung, wann sie verwendet werden sollen?
Wenn ich mir den Wert von anschaue auto-mode-alist
, scheinen sie austauschbar zu sein, um mit dem Ende von Zeichenfolgen übereinzustimmen:
(...
("\\.scss\\'" . scss-mode)
("\\.ya?ml$" . yaml-mode)
...)
elisp
regular-expressions
Jackson
quelle
quelle
$
, verlassen sie sich auf Dateinamen, die keine Zeilenumbrüche enthalten. Dies ist normalerweise eine (sehr) sichere Annahme, die jedoch nicht garantiert werden kann . Verwenden\\'
ist daher eine bewährte Methode.Antworten:
Ihre Zeichenfolge enthält möglicherweise ein eingebettetes Zeilenumbruchzeichen. In diesem Fall
\'
stimmt die Zeichenfolge mit dem Ende der Zeichenfolge$
überein , stimmt jedoch unmittelbar vor dem Zeilenumbruchzeichen überein.Um es mit dem Elisp Hand Knoten Regexp Spezial :
In ähnlicher Weise
\`
entspricht den Anfang des Strings, sondern^
entspricht nur nach den Newline - Zeichen. Wieder das Handbuch:Für Zeichenfolgen, die Sie im Allgemeinen verwenden möchten,
\`
und\'
insbesondere, wenn Ihr Code nicht im Voraus wissen kann, ob die Zeichenfolge möglicherweise Zeilenumbrüche enthält. Für Text in einem Puffer verwenden Sie normalerweise^
und$
.quelle
^
und$
passen Sie den Anfang und das Ende der Zeilen an .\`
und\'
passen Sie den Anfang und das Ende der gesamten Zeichenfolge an .quelle
Sonderzeichen sind:
. * + ? ^ $ \ [
.In Klammern
[]
stehen außerdem folgende Besonderheiten:] - ^
Viele Zeichen, einschließlich Backtick `und einfaches Anführungszeichen ', werden besonders, wenn sie einem Backslash folgen. Sehen Sie hier für weitere Details.
Es gibt einen Unterschied zwischen
beginning of string
undbeginning of each line in the string
.Mit freundlicher Genehmigung von Ergoemacs. Sie können hier mehr lesen
quelle