Wie machen Sie eine Abfrage ersetzen-Regexp in Emacs, die über mehrere Zeilen übereinstimmen?Emacs query-replace-regexp multiline
als triviales Beispiel würde ich möchte <p>\(.*?\)</p>
<p>foo
bar
</p>
Wie machen Sie eine Abfrage ersetzen-Regexp in Emacs, die über mehrere Zeilen übereinstimmen?Emacs query-replace-regexp multiline
als triviales Beispiel würde ich möchte <p>\(.*?\)</p>
<p>foo
bar
</p>
Versuchen Sie Zeichenklassen. Solange Sie nur ASCII-Zeichensatz verwenden, können Sie statt des Punktes [[:ascii:]]
verwenden. Die Verwendung des längeren [[:ascii:][:nonascii:]]
sollte für alles funktionieren.
M-x re-builder
ist dein Freund entsprechen. Und es führte mich zu diesem regulären Ausdruck:
"<p>\\(.\\|\n\\)*</p>"
, die die String-Version von
<p>\(.\|^J\)*</p> ;# where you enter ^J by C-q C-j
Und das funktioniert für mich, wenn ich re-search-forward, aber nicht, wenn ich 'query-replace-regexp
. Unsicher, warum ...
Wenn nun ein 're-search-forward
(aka C-u C-s
) tun, können Sie M-%
geben, die Sie für einen Ersatz aufgefordert wird (wie von Emacs 22). So können Sie Ihre Suche durchführen und durch die obige Regexp ersetzen.
Hinweis, wird die oben regexp, bis die in dem Puffer gefunden letzten</p>
übereinstimmen, das ist wahrscheinlich nicht das, was Sie wollen, so benutzen re-Builder ein regexp zu bauen, die näher kommt, was Sie wollen. Offensichtlich können reguläre Ausdrücke keine Klammern zählen, Sie sind also selbständig - abhängig davon, wie robust eine Lösung ist.
Gibt es Info-Dateien für den Re-Builder? Ich bin neugierig, wie man es benutzt. – seth
Nicht das ich finden kann. Auch das Emacs-Wiki hat nicht viel zu bieten. Aber es ist ziemlich selbsterklärend (ist nicht alles von Emacs :). Nachdem Sie 're-builder' eingegeben haben, geben Sie' C-c C-h' ein und Sie erhalten eine Auflistung von Bindings, einschließlich jener, die für 're-builder' gelten, die alle mit' C-c' beginnen. –
Yah, ich bin so weit gekommen. War nur auf der Suche nach etwas mehr in der Tiefe. Vielen Dank! – seth
Ich nehme an, Sie sahen Emacswiki: http://www.emacswiki.org/emacs/MultilineRegexp – seth
Ja, ich sah das, aber konnte es nicht funktionieren mit Query-Replace-regexp. immer noch versuchen, obwohl re-builder verwenden, um es zu testen ... hoffentlich werde ich es bald herausfinden –
Das Beispiel ist sehr schlecht, weil das Parsen von HTML mit regulären Ausdrücken ist im Allgemeinen keine gute Idee. – Svante