2017-03-17 2 views
1

Ich habe eine Reihe von Spaltennamen aus einer SQL-Abfrage, und ich möchte alles vor der AS mit Emacs loswerden. Mit anderen Worten, ich möchte vonEmacs: Ersetzen Regex gibt 0 Übereinstimmungen

MAX(CASE WHEN maintenance.work_order IS NULL THEN 1 ELSE 0 END) AS Has_work_order, 

zu

Has_work_order, 

ich re-builder eine einfache Regex erstellen gehen: "\.\*AS " die die entsprechenden Teile des Puffers hervorhebt. Wenn ich jedoch den gesamten Puffer auswählen und query-replace-regexp mit M-x query-replace-regexp <RET> "\.\*AS " <RET> "" <RET> ausführen, zeigt Emacs eine Replaced 0 occurrences Nachricht an.

Was mache ich falsch?

+0

Möglicherweise müssen Sie den Punkt oben in der Datei/Auswahl platzieren. –

+1

Sie entkommen '.' und' * ', anstatt sie als spezielle Sonderzeichen interpretieren zu lassen. – Drew

Antwort

1

Ich konnte dies mit dem folgenden Funktionen ausführen:

M-x query-replace-regexp <RET> \(.+\)AS <RET> <RET> 

Hinweis der Cursor über der Linie sein muss (n), die ersetzt werden müssen. Ich habe das vorher nicht benutzt, aber es ist interaktiv (Drücken von 'y' für jeden ersetzen, dies kann automatisch/global gemacht werden, aber ich habe nicht damit herumgespielt.

+0

Gut gemacht! Du suchst vielleicht nach '!', Um alle Ersetzungen zu machen. – Ehvince

+0

Vielen Dank! Das funktioniert gut. Warum müssen Sie hier die runden Klammern verwenden, wenn Sie nicht 're-builder' sind? – finbarr

+0

So habe ich gelernt und habe mich nie wirklich damit befasst. –

2

Mit re-builder (die ist eine gute Idee), um eine Regexp für interaktiv verwenden, werden Sie dann verwirrt zwischen den verschiedenen Regexp Syntaxoptionen re-builder Standards read Syntax (die Sie beim Schreiben elisp Code verwenden würden), während für interaktive Verwendung Sie want string Syntax

Siehe Why do regular expressions created with the regex builder use syntax different from the interactive regular expressions? für Erklärung und Klarstellung .

Im Lese Syntax, \.\*AS stellt die regexp .*AS (weil . und * nicht speziell sind, wenn Strings zu lesen, so dass diese Schrägstriche sind redundant); aber in String-Syntax \.\*AS ist die regexp \.\*AS, in dem die . und * Zeichen, die zu regexps Sonder sind entgangen waren, und damit ihre besondere Bedeutung verlieren, und werden stattdessen wörtliche . und * Zeichen im Text entsprechen.

Beachten Sie jedoch, dass bei der Eingabe eines regexp interaktiv sollten Sie nicht umfassen die umliegenden doppelte Anführungszeichen ", der für seine string Syntax-Modus in re-builder noch vorhanden sind. Wenn Sie die Zeichen " interaktiv eingeben, entspricht der Regexp dem Text, der diese " Zeichen enthält.

Verwandte Themen