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 tTtx(?=…)= 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-9asfx5sdfsdf,(?=[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 expressionFOREIGN 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 MethodeBeschreibungs.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 MethodeBeschreibungs.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 Online Regular Expression Editor: RegExr GitHub: ScriptEdit – Javascript Text Editor Regular expressions in Java – Tutorial unsere-schule.org × Regular Expressions Code: 235 Infos: unsere-schule Codes