Regular Expressions 235

Regular Expressions sind Zeichen oder Code, mit Hilfe dessen man Text durchsuchen kann, um bestimmte Elemente zu finden.

Regular Expression online testen und bearbeiten

Am einfachsten kann man Regular Expressions verstehen, wenn man sich einfache Beispiele anschaut und diese selbst verändert und testet. Dafür gibt es einen super online Editor „RegExr“, mit dessen Hilfe man Regular Expressions schreiben und ausführen kann. Er bietet sogar die Möglichkeit, gefundene Elemente zu ersetzen.

Die Regular Expression „[0-9]+“ findet alle Zahlen im Text und markiert diese.

Regular Expression in Notepad++

Der Texteditor notepad ++ bietet die Möglichkeit Text mit Hilfe von Regular Expressions zu durchsuchen und zu verändern. Dazu öffnet man das Suchfenster und aktiviert „Reguläre Ausdrücke“:

In diesem Beispiel wollte ich in jeder Zeile am Anfang eine Klammer auf „(“ hinzufügen. Dazu kann man „^“ nutzen, dies steht in den Regulären Ausdrücken für den Satzanfang. Vor der Klammer muss man einen Backspace setzen, damit notepad ++ weiß, dass es ein zu schreibendes Zeichen ist und kein Regulärer Ausdruck.

Cheatsheet

Hier werden einige Regular Expression Ausdrücke aufgeführt, die ich oft verwende:

Regular ExpressionErklärungBeispiel
^= Anfang des Textes(^)Hallo mein Name ist Richard.
$= Ende des TextesHallo mein Name ist Richard.($)
[A-Z]{1}= findet nur einen allein stehenden GroßbuchstabenTTT und tTt
x(?=…)= look ahead modifier – schaut sich die Zeichen nach dem aktuellen an.
z.B.: „x(?=[0-9])“ sucht im Text nach einem „x“ gefolgt von Zahlen von 0-9
asfx5sdfsdf
,(?=[0-9]{4})= sucht eine Zeichenkette, in der ein Komma gefolgt von 4 Zahlen vorkommen. Selektiert nur das Komma, da das „?=“ ein look ahead modifier ist, der die Zeichen nach einem Komma anschaut.Sophie,Tsui,2013-02-06,1
^((?!<system).)*$= Zeile, wenn diese NICHT „<system“ beinhaltet
^.*<system.*$= Zeile, wenn diese „<system“ beinhaltet

Beispiele

Tabellen und Spalten aus einem SQL CREATE Statement parsen

In einem Javascriptprojekt SQLverine musste ich für alle möglichen Tabellen den Fremdschlüssel bekommen, um die miteinander verbundenen Spalten farblich zu markieren. Hier kann man mit regulären Ausdrücken super die benötigten Informationen bekommen.

Ziel war es die rot markierten Spaltennamen und Tabellennamen zu identifizieren:

CREATE TABLE "schueler" (
	"id"	INTEGER NOT NULL UNIQUE,
	"vorname"	TEXT NOT NULL,
	"nachname"	TEXT NOT NULL,
	"geburtsdatum"	TEXT,
	"klasse_id"	INTEGER NOT NULL,
	PRIMARY KEY("id" AUTOINCREMENT),
	FOREIGN KEY("klasse_id") REFERENCES "klassen"("id")
);
gesuchte Informationregular expression
FOREIGN KEY(„klasse_id„)FOREIGN KEY(\(|\s\()“(\w+)“\)
Hier wird eine „capture group“ (\w+) genutzt, um genau den Spaltennamen „klasse_id“ zu finden, der sich nach FOREIGN KEY und in Klammern befindet.
REFERENCES „klassen(?<=REFERENCES ").+?(?=")
Hier wird wieder der look behind Code ?<= genutzt, um REFERENCES “ zu finden. Danach soll wieder alles bis “ markiert werden.
(„id„)(?<=(REFERENCES )("[a-z].+")(\(")).+(?="\))
Um eindeutig die „id“ in Klammern zu bekommen, muss im look behind Code alles ausgehend von REFERENCES nachgeschaut werden. Da man den Tabellennamen (hier „klassen“) nicht kennt wird ein Platzhalter eingesetzt: ("[a-z].+") dieser sucht ein “ und Zeichen von a-z bis wieder ein “ erreicht wird.

RegEx in Javascript

MethodeBeschreibung
s.match(/regex/)Testet, ob genau das Wort „regex“ gefunden wird und liefert das Wort zurück. Mit dem Parameter /g werden alle passenden Wörter in einem Array zurückgegeben.
/^regex$/.test("regex hallo")Wie matches in JAVA, testet ob der Teststring genau dem Regex entspricht. Hier wird „false“ zurückgegeben.
s.split(„regex„)Teilt einen String anhand des Wortes „regex„. Das Wort befindet sich nicht im Lösungsarray.
s.replace(/\bTor/g, „Tür“)Ersetzt das erste gefundene Wort „Tor“ mit „Tür„.
s.replaceAll(/\bTor/g, „Tür“)Ersetzt alle gefundenen Wörter die am Anfang „Tor“ stehen haben mit „Tür„.

RegEx in Java

MethodeBeschreibung
s.matches("regex")Testet, ob genau das Wort „regex“ gefunden wird und liefert true zurück. Es wird das GANZE Wort überprüft.
s.split(„regex„)Teilt einen String anhand des Wortes „regex„. Das Wort befindet sich nicht im Lösungsarray.
s.replaceFirst(„regex„, „replacement„)Ersetzt das erste gefundene Wort „regex“ mit „replacement„.
s.replaceAll(„regex„, „replacement„)Ersetzt alle gefundenen „regex“ mit „replacement„.
//entfernt alles außer Zahlen, Punkt und Komma
string.replaceAll("[^0-9,.]", "");

RegEx in PHP

MethodeBeschreibung
$str = „Visit W3Schools“;
$pattern = „/w3schools/i“;
echo preg_match($pattern, $str);
Testet, ob das Wort „W3Schools“ gefunden wird und liefert 1 zurück.
$str = „Visit W3Schools“;
$pattern = „/w(\d)/i“;
preg_match($pattern, $str, $result);
echo $result[1];
Testet ob im String „w + Zahl“ gefunden wurde und speichert die Ergebnisse in einem $result Array. [0] = ganzer String, [1-n] = gefundene Elemente.

Zum Testen von RegEx in PHP kann der online PHP Editor von w3schools genutzt werden.

Links

unsere-schule.org

×

Regular Expressions

Code: 235