29Jun

So verwenden Sie einfache reguläre Ausdrücke, um besser zu suchen und Zeit zu sparen

click fraud protection

Ob Sie mit Grep gesucht haben oder nach Programmen suchen, die Dateien für Sie im Batch-Verfahren umbenennen können, haben Sie sich wahrscheinlich gefragt, ob es einen einfacheren Weg gibt, Ihre Arbeit zu erledigen. Zum Glück gibt es das, und es heißt "reguläre Ausdrücke".

( Comic von XKCD.com)

Was sind reguläre Ausdrücke?

Reguläre Ausdrücke sind Anweisungen, die auf sehr spezifische Weise formatiert sind und für viele verschiedene Ergebnisse stehen können. Sie werden auch als "Regex" oder "Regexp" bezeichnet und werden hauptsächlich in Such- und Dateibenennungsfunktionen verwendet. Ein Regex kann wie eine Formel verwendet werden, um eine Anzahl von verschiedenen möglichen Ausgaben zu erstellen, nach denen alle gesucht werden. Alternativ können Sie angeben, wie eine Gruppe von Dateien benannt werden soll, indem Sie eine Regex angeben, und Ihre Software kann inkrementell zur nächsten beabsichtigten Ausgabe wechseln. Auf diese Weise können Sie mehrere Dateien in mehreren Ordnern sehr einfach und effizient umbenennen und Sie können die Grenzen eines einfachen Nummerierungssystems überschreiten.

instagram viewer

Da die Verwendung regulärer Ausdrücke auf einer speziellen Syntax beruht, muss Ihr Programm in der Lage sein, sie zu lesen und zu analysieren. Viele Programme zum Umbenennen von Dateien für Windows und OS X unterstützen regexps ebenso wie das plattformübergreifende Suchprogramm GREP( das wir in unserem Bash Scripting for Beginners Guide behandelt haben) und das Awk-Befehlszeilentool für * Nix. Darüber hinaus verwenden viele alternative Dateimanager, Launcher und Suchwerkzeuge diese, und sie haben einen sehr wichtigen Platz in Programmiersprachen wie Perl und Ruby. Andere Entwicklungsumgebungen wie. NET, Java und Python sowie das kommende C ++ 11 enthalten Standardbibliotheken für die Verwendung regulärer Ausdrücke. Wie Sie sich vorstellen können, können sie wirklich nützlich sein, wenn Sie versuchen, die Menge an Code zu minimieren, die Sie in ein Programm stecken.

A Hinweis zum Escapen von Zeichen

Bevor wir Ihnen Beispiele zeigen, möchten wir etwas hervorheben. Wir werden die bash-Shell und den Befehl grep verwenden, um Ihnen zu zeigen, wie Sie reguläre Ausdrücke anwenden. Das Problem ist, dass wir manchmal Sonderzeichen verwenden möchten, die an grep übergeben werden müssen, und die Bash-Shell wird dieses Zeichen interpretieren, weil die Shell es ebenfalls verwendet. Unter diesen Umständen müssen wir diesen Charakteren "entkommen".Dies kann verwirrend sein, da dieses "Entweichen" von Zeichen auch innerhalb von regulären Ausdrücken auftritt. Zum Beispiel, wenn wir dies in grep eingeben wollen:

\ & lt;

müssen wir das ersetzen mit:

\\\ & lt;

Jedes Sonderzeichen erhält einen Backslash. Alternativ können Sie auch einfache Anführungszeichen verwenden:

'\ & lt;'

Einfache Anführungszeichen sagen bash NICHT zu interpretieren, was in ihnen ist. Während wir diese Schritte benötigen, um für Sie demonstrieren zu können, benötigen Ihre Programme( insbesondere GUI-basierte) oft nicht diese zusätzlichen Schritte. Um die Dinge einfach und unkompliziert zu halten, wird Ihnen der eigentliche reguläre Ausdruck als zitierter Text gegeben, und Sie sehen in den Screenshots der Befehlszeile die Syntax mit den Escapezeichen.

Wie erweitern sie sich?

Regexps sind eine sehr prägnante Möglichkeit, Begriffe zu definieren, so dass Ihr Computer sie in mehrere Optionen erweitern kann. Sehen wir uns das folgende Beispiel an:

tom [0123456789]

Die eckigen Klammern - [und] - teilen der Parsing-Engine mit, dass alles, was sich darin befindet, mit einem beliebigen EINS-Zeichen verglichen werden kann. Was in diesen Klammern steht, wird als Zeichensatz bezeichnet.

Also, wenn wir eine riesige Liste von Einträgen hätten und wir diese Regex für die Suche verwenden würden, würden die folgenden Begriffe übereinstimmen:

  • tom
  • tom0
  • tom1
  • tom2
  • tom3

und so weiter. Die folgende Liste würde jedoch nicht übereinstimmen und würde daher nicht in Ihren Ergebnissen angezeigt:

  • Tomate;die Regex berücksichtigt keine Buchstaben nach "Tom"
  • Tom;Die Regex ist Groß-und Kleinschreibung!

Sie können auch mit einem Punkt( .) Suchen, der jedes vorhandene Zeichen erlaubt, solange ein Zeichen vorhanden ist.

Wie Sie sehen, hat das GREP mit

. tom

keine Begriffe angezeigt, die zu Beginn nur "tom" hatten. Sogar "grüne Tomaten" kamen herein, weil der Platz vor "tom" als ein Charakter gilt, aber Begriffe wie "tomF" hatten am Anfang keinen Charakter und wurden daher ignoriert.

Hinweis: Das Standardverhalten von Grep besteht darin, eine ganze Textzeile zurückzugeben, wenn ein Teil mit Ihrer Regex übereinstimmt. Andere Programme können dies nicht tun, und Sie können dies in Grep mit dem '-o' Flag abschalten.

Sie können Alternationen auch mit einer Pipe( |) angeben, wie hier:

speciali( s | z) e

Dies wird beides finden:

  • spezialiert
  • spezialiert

Wenn wir den Befehl grep verwenden, müssen wir die Sonderzeichen( ,|, und) mit Backslashes, sowie mit dem '-E' Flag, um dies zum Laufen zu bringen und hässliche Fehler zu vermeiden.

Wie oben erwähnt, liegt dies daran, dass wir der bash-Shell mitteilen müssen, dass sie diese Zeichen an grep weiterleiten und nichts mit ihnen machen soll. Das '-E' Flag weist grep an, die Klammern und die Pipe als Sonderzeichen zu verwenden.

Sie können nach Ausschluss suchen, indem Sie ein Caret verwenden, das sich sowohl innerhalb Ihrer eckigen Klammern als auch am Anfang eines Satzes befindet:

tom [^ F | 0-9]

Vergessen Sie nicht, bei grep und bash zu entkommendiese Pfeife!

Begriffe, die in der Liste waren, aber nicht angezeigt wurden, sind:

  • tom0
  • tom5
  • tom9
  • tomF

Diese haben nicht zu unserer Regex passen.

Wie kann ich Umgebungen nutzen?

Oft suchen wir nach Grenzen. Manchmal möchten wir nur Zeichenfolgen, die am Anfang eines Wortes, am Ende eines Wortes oder am Ende einer Zeile stehen. Dies kann leicht mit dem getan werden, was wir Anker nennen.

Mit einem Caret( außerhalb von Klammern) können Sie den "Anfang" einer Zeile festlegen.

^ tom

Um nach dem Ende einer Zeile zu suchen, verwenden Sie das Dollarzeichen.

tom $

Sie sehen, dass unser Suchstring in diesem Fall vor dem Anker liegt.

Sie können auch für Übereinstimmungen, die am Anfang oder Ende von Wörtern angezeigt werden, nicht für ganze Zeilen.

\ & lt;

tom \ & gt;

Wie wir bereits in der Anmerkung zu Beginn dieses Artikels erwähnt haben, müssen wir diesen Sonderzeichen entkommen, weil wir bash verwenden. Alternativ können Sie auch einfache Anführungszeichen verwenden:

Die Ergebnisse sind gleich. Stellen Sie sicher, dass Sie einfache Anführungszeichen und keine doppelten Anführungszeichen verwenden.

Andere Ressourcen für Advanced Regexps

Wir haben hier nur die Spitze des Eisbergs getroffen. Sie können auch nach Geldbegriffen suchen, die durch den Währungsmarker definiert sind, und nach einem von drei oder mehr übereinstimmenden Begriffen suchen. Die Dinge können sehr kompliziert werden. Wenn Sie mehr über reguläre Ausdrücke erfahren möchten, werfen Sie bitte einen Blick auf die folgenden Quellen.

  • Zytrax.com hat ein paar Seiten mit spezifischen Beispielen, warum Dinge nicht stimmen.
  • Regular-Expressions.info hat auch eine Killer-Anleitung für viele der fortgeschritteneren Sachen, sowie eine praktische Referenzseite.
  • Gnu.org hat eine Seite für die Verwendung von Regexps mit Grep.

Sie können Ihre regulären Ausdrücke auch mit einem kostenlosen Flash-basierten Online-Tool namens RegExr erstellen und testen. Es funktioniert wie Sie schreiben, ist frei und kann in den meisten Browsern verwendet werden.

Haben Sie eine bevorzugte Verwendung für reguläre Ausdrücke? Kennen Sie einen großen Stapel Renamer, der sie verwendet? Vielleicht willst du nur mit deinem Grep-Fu angeben. Bringen Sie Ihre Meinung mit, indem Sie kommentieren!