 Hallo, ich bin Harbrock und ich gebe eine wirklich sehr grundlegende Einführung in reguläre Ausdrücke. Hauptsächlich daher, dass ich festgestellt habe, dass viele von meinen Kollegen davon noch nie überhaupt was all gehört haben. Erst mal ein großer Rechner umfällt, geschweige den da, wissen was das ist oder was man damit anfangen könnte. Ja, was ist das überhaupt? Ich würde das definieren als eine Sprache zur Beschreibung von Mustern in Zeichenketten. Das ganze hatte das erste Mal eine größere Verbreitung in den 70er Jahren im Unix-Bereich gefunden. Dementsprechend unterstützen sehr viele Kommandozellen Werkzeuge, reguläre Ausdrücke und mittlerweile aber auch viele Editoren und unterschiedliche Programmiersprachen. Ja, und was daraus dann fast automatisch folgte, die Implementierung in einzelnen Programmiersprachen und Editoren und so weiter unterscheiden sich ja durchaus im Sprachumfang. Ich versuche jetzt dann eine wirkliche, also grundlegende Elemente, die eigentlich in jeder Implementierung vorhanden sind oder dürften vorzustellen. Ja, was ist, dass er ganz gut die oberen beiden Punkte, das sind Sachen, wo ich es dann wirklich beruflich schon gebraucht habe. Wir zum Beispiel in einem längeren Programm, wo viele fachliche Werte hartkodiert sind, die Stellen zu finden, wo eine Zahl aus dem Bereich 120 bis 125 oder die 135 oder die 145 auftritt, weil an diesen Stellen höchstwahrscheinlich eine Änderung durchzuführen ist. Also eine weitere Zahl soll sich ganz analog verhalten zu denen. Aber gleichzeitig möchte ich nicht jede Zeile finden, wo zum Beispiel die 1200 oder so vorkommt oder wo irgendein dieser Teil der Zeilennummer ist oder etwas anderes, was ich auch schon häufiger hatte, von einer Fachabteilung kamen Werte, die in eine Datenbank-Tabelle kommen sollten, natürlich in einer Excel-Tabelle und jede Zeile musste dann in ein Datenbankinsert unformatiert werden und in den Zeilen fand sich dann auch eine Spalte, immer das gleiche, hat drei Buchstabige Kürzel und dahinter eine Jahreszahl und das Ganze musste dann mit Hochkommota versehen werden, damit es schön als Zeichenkette in die Datenbank eingefügt werden kann und wenn das genügend unterschiedliche Jahreszahlen werden möchte man das nicht mehr mit einer mit der üblichen Suche und Untersetzenfunktion machen, sondern dafür dann doch einen regulären Ausdruck benutzen. Und die denke ich ja mit dem häufigsten aufertretender Art, wie reguläre Ausdrücke genutzt werden, wäre das Beschreiben bzw. abprüfen gültiger Muster, zum Beispiel ist eine Mail-Adresse, die irgendwo eingegeben wurde, tatsächlich auch eine gültige Mail-Adresse. Grundsätzlich gilt die meisten Zeichen, kann man immer Suche, Feld einfacher nutzen wie gewohnt bis auf die 14 Zeichen, hier in der Zeile Meter Zeichen, die eine, die normalerweise eine andere Bedeutung haben in einem regulären Ausdruck. Wenn man so ein Zeichen nutzen will, muss man es mit einem vorangestellten Backslash escapen. Mehrere Zeichen kann man dann zu einer Zeichklasse zusammenfügen, in diesem Fall eine der Ziffern aus dem Bereich 1, 2, 3, 4, 5 und das Ganze kann man natürlich kürzer schreiben, Meter 1 bis 5 und dementsprechend hat der Bindestrich in der Zeichenklassen die Besonderheit. Wenn man tatsächlich ein Bindestrich meint, muss man ihn ganz am Ende, ganz ans Ende, da gegen Klammer setzen, weil er sonst versucht wird als Markierung für einen Bereich zu verwenden. Ja und für bestimmte Zeichenklassen gibt es auch eine Hauptkürzung, wie für Ziffern von 0 bis 9 hat die Abkürzung Backslash Kleinen D, die hier weiter und häufiger genutzten Kürzeln komme ich gleich dazu und natürlich kann man dann auch so eine Zeichklasse negieren, also durch dieses Dach als erstes Zeichen Das heißt, das würde alles gefunden außer den Zeichen die danach definiert werden und ja auch mehrere Bereiche kann man in einer Zeichklasse in den Klammern schreiben, der mehrere Bereiche oder Zeichklassen für einigen geht auch so, also eine Zeichklasse ist auch wiederum ein ergültiges Zeichen in der Zeichklasse und Differenz wäre mit immer doppelten und Zeichen, also in diesem Fall der Bereich klein A bis Z ohne den Bereich M bis R. Ja wir sind angekündigt Okay, da habe ich die Folie etwas versiebt, also für Ziffern Backslash Kleinen D, alles außer den Ziffern wäre dann Backslash Groß D, für eine Wortzeichen Backslash Kleinen W, die Definition, was ein Wort Zeichen ist, ist so wie ich das gesehen habe, implementierungsabhängig, aber Buchstaben und großen Kleinbuchstaben und Ziffern sind da eigentlich immer enthalten, eventuell auch ein Unterstrich, da gibt es auch wieder das Gegenteil, also alles außer den Wortzeichen wäre Backslash Groß W und auch für Weitspäße oder nicht Weitspäße ist es dann S beziehungsweise ein großes S und unser letzter Punkt steht für ein beliebiges Zeichen, normalerweise außer New Line, der Anmerkung war, Weitspäße ist nicht nur Erlehrzeichen, sondern auch Tabulator und so weiter, also verschiedene Zeichen, wo man nichts sieht, die aber Textabstand liefern. Ja, also Punkt ist ein beliebiges Zeichen außer New Line üblicher Weise, wobei man das dann häufig konfigurieren kann, dass New Line doch gilt. Da wir Zeichen oder auch Zeichenklassen mehrfach finden wollen, gibt es eine Anwendung der geschweiften Klammer, also mit einer Zahl drin wird genauso oft das Zeichen gefunden, in diesem Fall fünfmal das A, mit zwei Zahlen definiert man einen Bereich, also in diesem Fall zwischen zwei und vier mal Auftreten von A und eine Zahl gefolgt mit dem Komma, liefert nur eine Untergrenze, wie oft das Zeichen mindestens finden möchte. Auch hier gibt es für häufige Wiederholungen nochmal Abkürzungen, also der Stern bedeutet beliebige viele Zeichen, es muss aber auch, es muss überhaupt nicht auftreten, plus wäre es muss auftreten, beliebige oft also einmal reicht und Fragezeichen wäre 0 oder einmal auftreten. Wenn wiederholungen gibt es dann auch die Möglichkeit, noch ein Fragezeichen hinten heran zu stellen, also es geht auch bei den Kürzeln, das nennt sich Genüksames finden und das sagt dann dafür, dass möglichst wenige Zeichen gefunden werden, also dann hat man noch die Möglichkeit, mehr Grenzen der breite Null zu nutzen, wie zum Beispiel den Zeilenanfang oder das Dollar als Zeilenende oder backslash, kleinen B, also Wortgrenze und auch backslash groß B als nicht Wortgrenze, also das zeigt dann jeweils nicht auf ein Zeichen, sondern also sagen auf die Lücke zwischen zwei Zeichen. Dann hat man auch die Möglichkeit zum Gruppieren, was man auch recht häufig braucht, ist das denkrechte Strich für Oder, da sind in diesem Fall Wett, liefert Klammertreffer, wenn Fuh oder auch wenn Bar auftritt. Insgesamt mit Rundenklammern definiert man sich eine einfangende Gruppe, das bedeutet, dass man diese Gruppe dann später noch ansprechen oder wieder ansprechen kann und so was diese Gruppe dann gefunden hat. Die erste wäre dann aufrufbar mit backslash 1 oder dollar 1, die zweite dann mit backslash 2 oder dollar 2 und so weiter. Ist auch natürlich sehr nützlich bei Suchen und Ersetzen Funktionen, wenn man einen Teil sucht und dann im Ersetzen weiter verwenden will. Man kann die eigenen einfangenen Gruppen auch selber mit einem Namen versehen, das wäre dann mit Fragezeichen und den spitzen Klammern und die Referenz der Gruppe erfolgt dann mit dollar plus und dem Namen geschweiften Klammern. Mit Fragezeichen hat Doppelpunkt, bekommt man eine nicht einfangende Gruppe hin, wenn man weiß, dass man den Inhalt dieser Gruppe sowieso später nicht mehr benötigt, dass er meines Wissens eine etwas bessere Performance hat. Jetzt können wir uns die vorhin genannten Fälle auch noch mal anschauen. Wir haben jetzt eine Möglichkeit, um die Zahlen 120 bis 125, 135 und 145 in einem Schritt zu finden und das Beispiel mit einem Anführungszeichen setzen. Also in diesem Fall werde ich ein Pfeil zu verstehen als vorne dran zu suchen und hinter dem Ersetzenfenster findet Fuh und dahinter vier Ziffern und ersetzt das Ganze durch eine Hochkommar, Inhalt der einfangenden Gruppe, Hochkommar. Etwas weiteres wären Lookarounds, also dass man definierte, was hinter der Zeichenkette, die man eigentlich erfinden will, stehen soll. In diesem Fall wird Fuh gefunden, wenn dahinter Bar steht, das ist ein positiver Lookahead. Das Ganze gibt es dann auch noch als negativen Lookahead mit Fragezeichen Ausrufezeichen, Fragezeichen gleich. In diesem Fall wird Fuh nur gefunden, wenn dahinter nicht direkt Bar folgt und das Ganze gibt es dann auch noch als a Lookbehind. Hier wird Bar gefunden, wenn da davor Fuh folgt und negativ es wird Bar gefunden, wenn davor kein Fuh entsteht. Damit bin ich schon durch, schneller als ich dachte. Also hier noch zwei Buchempfehlungen, die mir geholfen haben beim Mechanistema 1 zu arbeiten. Also einstieg in reguläre Ausdrücke und reguläre Ausdrücke kürzen gut. Und zum Ausprobieren beziehungsweise die eigenen Erfähigkeiten jetzt trainieren ist Rack X Crossword, eine recht nette Seite, gewissermaßen Kreuzfahrträtsel ausfüllen, wobei die Hinweise für die Zeilen und Spalten reguläre Ausdrücke sind, die erfüllt sein müssen. Ja, damit hat jemand Fragen, die ich eventuell noch beantworten kann. Dann noch ein weiteres reguläre Ausdrücke. Wir haben noch einen bedeutenden größeren Umfang. Es gibt in vielen Implementierungen die Möglichkeit, Unicode nach Unicode Zeichen zu suchen beziehungsweise auf Eigenschaften von Unicode Zeichen zuzugreifen. Okay, also das Oberste ist, ich suche nach keine Ziffer, danach kommt eine 1 und danach entweder 2 und dahinter irgendwas aus dem Bereich Dull bis 5 oder eine 35 oder eine 45 und danach folgende wiederum eine Nicht-Ziffer. Und im unteren Fall suche ich nach der Gruppe FU und dahinter 4 Ziffern und ersetze das solche Hochkoma-Inhalt dieser einfangenden Gruppen mit Backslash 1 und wiederum Hochkoma. Moment, Mikrofon kommt. Das muss ich sagen, ich weiß es nicht genau, aber man könnte auf jeden Fall eine Backslash kleinen B, also als Wortanfang und Wortende nehmen. Statt das Backslash groß D, wäre eigentlich auch sauberer, weil ich es so dann auch irgendwo in einem Wort der Zahl finden würde. Okay, sonst, okay, wenn es sonst keine weiteren Fragen gibt, bedanke ich mich für die Aufmerksamkeit.