RegEx oder re sind die üblichen Abkürzungen für eine regular expression, also für einen regulären Ausdruck, ein allgemeines Suchmuster nach einer Zeichenkette.

Man könnte auch sagen, RegularExpressions sind spezielle Formeln, die dazu verwendet werden können, nach sogenannten regulären Ausdrücken in Texten zu suchen und diese gegebenenfalls durch einen anderen Ausdruck zu ersetzen. Hierbei handelt es sich nicht um ein spezielles Programm, sondern um eine Art Regelwerk, welches von textverarbeitenden Programmen wie beispielsweise sed, grep und im speziellen perl verstanden wird.

Leider verstehen nicht alle Programme immer die gleiche Syntax, da es vom jeweiligen Programm(ierer) abhängt, wie ein Programm genau auf eine RegEx reagiert.

Siehe auch: man 7 regex bzw. Python Regular Expression Syntax

Beispiele

Ausdruck

Bedeutung

abcd

passt auf abcd

.

passt auf ein beliebiges Zeichen außer Zeilenwechsel

[abcd]

passt auf genau eines von a, b, c oder d

[^abcd]

passt auf alles außer a, b, c oder d

[:lower:]

passt auf alle Kleinbuchstaben; siehe PosixZeichenklassen

*

beliebig viele Wiederholungen (auch 0!) des vorausgehenden re

+

1 oder mehr Wiederholungen des vorausgehenden re

?

0 oder 1 Wiederholung des vorausgehenden re

*? bzw. +?

wie * bzw. +, aber 'non greedy' (siehe Beispiel unten)

( )

Gruppierung von re

(abc|def)

abc oder def

Anker

In den meisten Fällen können die Anker ^ (Anfang) und $ (Ende) gesetzt werden:

re

gefunden wird

nicht gefunden wird

^0[0-9-]+

089-983849

774646

[.](txt|html)$

datei.html

html-Datei

^R.*g$

Richtig

Richtige

Es gibt auch die Anker für Wortanfang und Wortende. Die sind entweder \< und \> oder in beiden Fällen \b, abhängig vom benutzten Programm :(

re

gefunden wird

nicht gefunden wird

^\<richtig\>.+$

richtig gut

richtige Lösung

Beispiel

grep '^76' Adressen.txt

gibt alle Zeien der Datei Adressen.txt aus, die mit 76 beginnen.

Beispiel zu greedy / non-greedy

Folgender String

'abcdefga'

passt auf den re '(.+)(.*)', aber auch auf '(.+?)(.*)', aber es gibt einen großen Unterschied:

Im ersten Fall wird der komplette String auf das erste .+ gematched, so dass für das darauf folgende .* nichts mehr übrig bleibt. Trotzdem passt der re, denn * passt ja auch auf 0 Wiederholungen. Man sagt, der erste re sei 'greedy' (gierig), er reißt alles an sich, was er bekommen kann.

Im zweiten Fall wird lediglich das erste a auf das erste .+? gematched, der Rest des Strings matched das darauf folgende .*. Man nennt das 'non greedy' (nicht gierig), er nimmt nur soviel wie er braucht.

Einen Unterschied macht das, wenn man die Matches dazu benutzt, um Teilstrings zu erhalten.

Seiten finden im LinuxWiki

Zum SeiteFinden im LinuxWiki können auch reguläre Ausdrücke verwendet werden. Beispiele:

Finde solche Seiten, die


ToDo: Das ganze ist noch ziemlich unstrukturiert und sollte noch erheblich ergänzt werden.


Witziges

http://www.hackles.org/strips/cartoon292.png

ReguläreAusdrücke (zuletzt geändert am 2008-10-27 09:57:54 durch JoernBruns)