Regular Expressions 101

Save & Manage Regex

  • Current Version: 17
  • Save & Share
  • Community Library

Flavor

  • PCRE2 (PHP)
  • ECMAScript (JavaScript)
  • Python
  • Golang
  • Java
  • .NET 7.0 (C#)
  • Rust
  • PCRE (Legacy)
  • Regex Flavor Guide

Function

  • Match
  • Substitution
  • List
  • Unit Tests
Sponsors
An explanation of your regex will be automatically generated as you type.
Detailed match information will be displayed here automatically.
  • All Tokens
  • Common Tokens
  • General Tokens
  • Anchors
  • Meta Sequences
  • Quantifiers
  • Group Constructs
  • Character Classes
  • Flags/Modifiers
  • Substitution
  • A single character of: a, b or c
    [abc]
  • A character except: a, b or c
    [^abc]
  • A character in the range: a-z
    [a-z]
  • A character not in the range: a-z
    [^a-z]
  • A character in the range: a-z or A-Z
    [a-zA-Z]
  • Character class intersection
    [\w&&[^\d]]
  • Any single character
    .
  • Alternate - match either a or b
    a|b
  • Any whitespace character
    \s
  • Any non-whitespace character
    \S
  • Any digit
    \d
  • Any non-digit
    \D
  • Any word character
    \w
  • Any non-word character
    \W
  • Non-capturing group
    (?:...)
  • Capturing group
    (...)
  • Zero or one of a
    a?
  • Zero or more of a
    a*
  • One or more of a
    a+
  • Exactly 3 of a
    a{3}
  • 3 or more of a
    a{3,}
  • Between 3 and 6 of a
    a{3,6}
  • Start of string
    ^
  • End of string
    $
  • A word boundary
    \b
  • Non-word boundary
    \B

Regular Expression
Processing...

Test String

Code Generator

Generated Code

const regex = /<h3>(.*?)<\/h3>/; // Alternative syntax using RegExp constructor // const regex = new RegExp('<h3>(.*?)<\\\/h3>', '') const str = `{{1}} <h2>Allgemeines</h2> <h3>Was sind die Kommunikationskanäle für die Übungen?</h3> <p>Allgemeine Fragen gehören in die Newsgroup, da wir sie da für alle Übungsteilnehmer gleichermaßen beantworten können. </p> <p>Fragen zur eigenen Implementierung dürfen hingegen nicht öffentlich gestellt werden. Nutzt dafür unser Ticketsystem.</p> <p>Organisatorische Fragen (z.B. Information bei Krankheit, Anfragen nach Terminverlegungen, Kommunikationsprobleme auf einem unserer anderen Kanäle etc.) schickt bitte per E-Mail an den entsprechenden Übungsverteiler (<html><body><code class="highlight">unix@..</code></body></html> oder <html><body><code class="highlight">foop@..</code></body></html>). </p> <h3>Warum soll ich die Übungs-E-Mailverteiler nutzen und euch nicht direkt anschreiben?</h3> <p>Zum einen, damit immer alle Übungsverantwortlichen gleichermaßen informiert sind und reagieren können *asdas*(auch bei uns kann ja mal jemand ausfallen), zum anderen teilen wir uns die Aufgaben natürlich auch ein und Anfragen könnten, wenn sie nur an eine Person direkt gestellt werden, unnötig lange liegen bleiben.</p> <h3>Ich habe eine ganz dringende Frage - wie kann ich euch erreichen?</h3> <p>Bitte nutzt immer die vorgeschriebenen Kommunikationskanäle - eine schnellere Kontaktmöglichkeit gibt es nicht. Schreibt uns in keinem Fall privat bei Teams an, da wir diese Kanäle ausschließlich zur internen Kommunikation zwischen den Übungsleitern und Übungs(mit)betreuern nutzen. Private Chats und Anrufe von Übungsteilnehmern werden wir ignorieren und euch entsprechend auf stumm schalten. Wiederholte Kontaktversuche / Störungen werden wir als Störung des Übungsfriedens werten und entsprechend darauf reagieren. Die einzige Ausnahme von dieser Regel ist, wenn wir euch persönlich dazu auffordern uns direkt bei Teams anzuschreiben.</p> <h3>Meine Anfrage wurde noch nicht bearbeitet, obwohl sie schon x Stunden her ist. Wie kann ich die Bearbeitung beschleunigen?</h3> <p>Wir bearbeiten Anfragen immer so schnell wie es uns möglich ist. Da ihr keine Möglichkeit habt zu sehen wie hoch unsere momentane Auslastung jeweils ist, seht bitte von Nachfragen ab. Nachfragen erhöhen lediglich den Overhead für uns und kosten uns im Endeffekt Zeit, die wir sonst nutzen könnten um auf “echte” Anfragen zu reagieren. Ansonsten gilt zu diesem Punkt alles was unter “Ich habe eine ganz dringende Frage - wie kann ich euch erreichen?” steht.</p> <h3>Ich habe ein Problem oder eine Frage, welche zu komplex ist um sie textuell als Ticket zu beschreiben. Wo bekomme ich einen Besprechungstermin?</h3> <p>Macht einfach ein entsprechendes Ticket auf und versucht uns bitte trotzdem so eine grobe Richtung zu geben wie umfangreich eure Frage ist oder auf was sie abzielt, dass wir entsprechend Zeit für eine Besprechung einplanen können. Bitte vermerkt unbedingt eure Verfügbarkeiten im Ticket, so dass wir nicht extra nachfragen müssen. Wir gehen davon aus, dass ihr zu den Besprechungsterminen laut Kalender immer verfügbar seid. (Siehe auch “Wann finden die Betreuungstermine per Videokonferenz statt?”)</p> <h3>Wann kann ich mit einer Antwort auf meine Anfrage / Ticket rechnen?</h3> <p>Unsere Arbeitszeiten sind üblicherweise 8 Stunden pro Tag an den Werktagen (Montag bis Freitag) innerhalb der üblichen Vorlesungszeiten - also zwischen frühestens 8 Uhr und spätestens 18:30. Außerhalb dieser Zeiten ist eine Antwort zwar nicht per se ausgeschlossen, aber eher unwahrscheinlich. Bitte beachtet, dass insbesondere am Tag vor dem Servertest ggfs. nicht mehr alle eingehenden Anfragen rechtzeitig bearbeitet werden können und organisiert euch entsprechend - die Zeiträume für die Bearbeitung der Aufgaben sind auch aus diesem Grund eher großzügig gewählt.</p> <p>Generell sind wir selbstverständlich bestrebt alle Anfragen zeitnah zu beantworten, bedenkt aber, dass wir außer Support auch noch eine Menge anderer Tätigkeiten nachgehen (wie z.B. Übungsabnahmen, Aufgabenerstellung, Organisation, Gremientätigkeiten an der Hochschule und die Durchführung von anderen Veranstaltungen (Unix-Vorlesung)) und momentan (Stand Sommersemester 2020) außer eurer Gruppe noch knapp 120 weitere Übungsgruppen aus den Übungen Unix und FOOP betreuen. </p> <h3>Wann finden die Betreuungstermine per Videokonferenz statt?</h3> <p>Die Betreuung per Videokonferenz findet nach persönlicher Absprache mit uns (über das Ticketsystem) statt. Die Termine, zu denen wir eine Verfügbarkeit für die Betreuung per Videokonferenz garantieren, sind die im jeweiligen Übungskalender als “Betreuung” gekennzeichneten Zeitslots. Je nach unserer Verfügbarkeit und der zeitlichen Entfernung zum nächsten Betreuungstermin werden wir versuchen, ggfs. auch frühere Termine anzubieten. Es ist dafür sehr nützlich, wenn ihr direkt eure Verfügbarkeiten für eine Besprechung im Ticket mit angebt um weitere Rückfragen zu vermeiden. Wir gehen davon aus, dass ihr zu den Besprechungsterminen laut Kalender immer verfügbar seid.</p> <h3>Wie kommuniziert ihr mit uns?</h3> <p>Alle öffentlichen Ankündigungen (Veröffentlichung Aufgabenstellungen, Freischaltung Servertest, eventuelle Korrekturen oder Ergänzungen an Aufgabenstellungen, Serverwartungen, Terminverschiebungen, etc.) erfolgen stets in der entsprechenden Newsgroup.</p> <p>Anfragen von euch werden von uns immer auf dem Kanal beantwortet, auf dem sie auch eingegangen sind. Beachtet, dass das Ticketsystem mit eurer FH-E-Mailadresse verknüpft ist.</p> <h2>Aufgabenstellungen</h2> <h3>Wo finde ich die Aufgabenstellungen?</h3> <p>Aufgabenstellungen werden stets auf den Unterseiten der entsprechenden Übung auf dieser Webseite veröffentlicht.</p> <h3>Wann werden die Aufgabenstellungen veröffentlicht?</h3> <p>Die Aufgabenstellungen werden an dem Tag veröffentlicht der dafür im Kalender steht. Die Uhrzeit stammt noch aus den Zeiten zu denen es da eine Aufgabenvorstellung im Hörsaal geben konnte und ist daher nicht mehr weiter von Bedeutung. Wir nutzen den Freiraum, der durch den Wegfall der Aufgabenvorstellung im Hörsaal entstanden ist, im Zweifelsfall dafür, die Aufgabe noch mit Ergänzungen zu versehen, die den Wegfall der Aufgabenvorstellung zumindest ein bisschen kompensieren können.</p> <p>Sobald die Aufgabe veröffentlicht wurde, wird dies in der entsprechenden Newsgroup angekündigt.</p> <h3>Ich verstehe etwas an der Aufgabenstellung / dem vorgegebenen Code (falls vorhanden) / den vorgegebenen Kommentaren (falls vorhanden) nicht.</h3> <p>Bitte formuliert eure Frage in der Newsgroup - dort kann sie am schnellsten und effizientesten beantwortet werden.</p> <h3>Ich habe eine Frage zu meiner persönlichen Lösung der Aufgabe.</h3> <p>Bitte schreibt ein entsprechendes Ticket in unserem Ticketsystem. Wir werden dann entscheiden, ob eine schriftliche Diskussion zielführend ist, und, falls nicht, einen Besprechungstermin für eine Videokonferenz mit euch vereinbaren.</p> <h2>Ticketsystem / Tickets</h2> <h3>Wie melde ich mich am Ticketsystem an?</h3> <p>Zum Start der Übung habt ihr alle einen Link an eure FH-E-Mailadresse erhalten, mit dem ihr euch am Ticketsystem registrieren könnt. Der Benutzername ist eure FH-E-Mailadresse (ohne stud und ohne rz im Namen, also z.B. <html><body><code class="highlight">inf123456@fh-wedel.de</code></body></html>) das Passwort ist frei wählbar.</p> <h3>Die Registrierung klappt nicht.</h3> <p>Habt ihr beide Zeilen des Links aus der E-Mail kopiert? Falls es damit nicht funktioniert, sagt gern per E-Mail an den entsprechenden Übungsverteiler (<html><body><code class="highlight">unix@..</code></body></html> oder <html><body><code class="highlight">foop@..</code></body></html>) Bescheid - wir lösen den Vorgang dann für euch nochmals manuell aus.</p> <h3>Ich habe meine Passwort vergessen.</h3> <p>Ihr könnt auf der Oberfläche des Ticketsystems bei einem fehlgeschlagenen Login-Versuch eine E-Mail zum Neu-Setzen des Passworts anfordern. Sollte das nicht funktionieren, schickt uns bitte eine E-Mail an den entsprechenden Übungsverteiler (<html><body><code class="highlight">unix@..</code></body></html> oder <html><body><code class="highlight">foop@..</code></body></html>) - wir lösen den Vorgang dann für euch manuell aus.</p> <h3>Wie lege ich ein Ticket an?</h3> <p>Ganz einfach: Meldet euch mit eurem Benutzernamen und dem von euch gesetzten Passwort (siehe “Wie melde ich mich am Ticketsystem an?”) an und erstellt ein Ticket.</p> <h3>Meine Frage wurde zwar beantwortet, aber leider nicht ausreichend oder ich verstehe etwas an der Antwort nicht.</h3> <p>Ihr könnt eure Tickets auch wieder öffnen indem ihr einfach darauf antwortet. Bitte nutzt unbedingt diese Möglichkeit, damit wir den Verlauf der Frage nachvollziehen können und euch nicht mehrmals die selben Sachen schreiben.</p> <h3>Meine Frage hat sich zwischenzeitlich erledigt.</h3> <p>Bitte schreibt einfach “Hat sich erledigt” oder ähnliches als Antwort auf euer eigenes Ticket. Wir werden das dann entsprechend einfach löschen oder als erledigt markieren.</p> <p>Bedenkt bitte, dass das Bearbeiten von Tickets einen nicht unwesentlichen Anteil unserer Zeit in Anspruch nimmt und es für uns ausgesprochen unangenehm ist unsere Zeit mit Fragen zu verschwenden, die sich bereits erledigt haben.</p> <h3>Meine Frage hat sich seit dem Ticket öffnen verändert bzw. ich habe neue Erkenntnisse gewonnen.</h3> <p>Bitte schreibt schnellstmöglich einen entsprechenden Änderungslog / eine entsprechende Erweiterung als Antwort auf euer Ticket. Wir werden das dann bei der Bearbeitung berücksichtigen.</p> <p>Bedenkt bitte, dass das Bearbeiten von Tickets einen nicht unwesentlichen Anteil unserer Zeit in Anspruch nimmt und es für uns und euch wenig zielführend ist, wenn wir unsere Zeit in die Beantwortung nicht mehr aktueller Fragen investieren. Ihr würdet ja bei der persönlichen Betreuung auch nicht mit dem Erkenntnisstand “von vor zwei Stunden” fragen, wenn ihr inzwischen neue Erkenntnisse dazu gewonnen habt.</p> <h2>Organisatorisches</h2> <h3>Wo finden die Abnahmen statt und was brauche ich dafür?</h3> <p>Die Abnahmen finden in einem nur eurer Gruppe und den Abnehmern der jeweiligen Übung zugeordneten privaten Kanal bei MS Teams statt. Ihr benötigt für die Abnahme das entsprechende Equipment für eine Videokonferenz (Kamera, Lautsprecher &amp; Mikrofon oder Headset) und einen funktionierenden Zugang zu MS Teams.</p> <h3>Wo finden die Besprechungen per Videokonferenz statt?</h3> <p>Die Besprechungen - ebenso wie die Abnahmen - finden immer in dem eurer Gruppe zugeordneten privaten Kanal bei MS Teams statt. Bitte startet zur vereinbarten Uhrzeit eine Besprechung, wir kommen dann dazu. Bitte seid insbesondere während der Besprechungstermine etwas geduldig, da wir versuchen möglichst viele Gruppen zu betreuen und vorher nicht immer abschätzen können, wie lange es dauert, kann es da teilweise zu längeren Wartezeiten kommen.</p> <h2>Servertest</h2> <h3>Wie erfahre ich ab wann der Servertest verfügbar ist?</h3> <p>Wir kündigen die Verfügbarkeit des Servertests immer in der Newsgroup an - und zwar in dem Moment, in dem er verfügbar ist. Bitte seht von Nachfragen “wann endlich der Test erscheint” in der Newsgroup oder auf anderen Kanälen ab - ihr könnt euch sicher sein, dass wir weder das Freischalten des Tests noch die entsprechende Ankündigung vergessen haben oder vergessen werden.</p> <h3>Mein Programm tut augenscheinlich genau das was es tun soll, aber der Servertest liefert beständig nur geringe Prozentzahlen. Woran kann das liegen?</h3> <p>In Unix kann das häufig daran liegen, dass euer Programm die Ausgabespezifikation nicht exakt einhält. Prüft zunächst, ob ihr euch vielleicht irgendwo bei einer Ausgabe vertippt habt oder ob ihr vielleicht Zeichen mit ausgebt, die nicht erwartet werden (der Klassiker sind zusätzliche Leerzeichen am Ende einer Zeile oder fehlende Leerzeichen bei der Formatierung der Ausgabe).</p> <p>In FOOP ist es etwas schwieriger das so allgemein einzugrenzen. Im Zweifelsfall liegt es daran, dass euer Programm sich bei einer vorgegebenen öffentlichen Schnittstelle anders verhält als erwartet. Sollten wir testkritische Schnittstellen in der Aufgabenstellung definiert haben, prüft bitte zunächst diese auf Herz und Nieren. Sollten wir Tests vorgegebenen haben, müssen diese in jedem Fall erstmal laufen, bevor wir eine Aussage zu euren Prozentwerten treffen können - die Tests, die wir mitliefern, dienen ja zumeist genau dem Zweck die Funktion testkritischer Schnittstellen sicherzustellen und sollen euch zudem den Einstieg in das Testen der Aufgabe erleichtern.</p> <p>Wenn ihr nach Berücksichtigung dieser Tipps nicht weiter kommt, fragt gern nach - siehe nächster Punkt.</p> <h3>Ich habe weniger als 100% im Servertest und beim besten Willen keine Idee woran es liegen könnte. Wo bekomme ich Hilfe?</h3> <p>Bitte macht ein entsprechendes Ticket im Ticketsystem auf - wir behandeln diese Anfragen wie jedes andere Ticket und antworten entweder schriftlich (wenn möglich) oder vereinbaren einen Termin zur Besprechung mit euch. Häufig sind diese Fragen in einem Gespräch einfacher zu klären als schriftlich, daher bietet es sich an bei einem solchen Ticket eure Verfügbarkeiten präventiv immer mit anzugeben.</p> <h3>Was genau bedeutet “Der Zugriff auf den Testserver ist nur von Montag bis Freitag zu euren regulären Arbeitszeiten (10–18 Uhr) garantiert”?</h3> <p>Das bedeutet, dass wir nur in diesem Zeitfenster garantieren können, dass Ausfälle am Testserver auch behoben werden können. Generell ist der Testserver von unserer Seite aus 24 / 7 online und verfügbar, da wir euch in euren Arbeitszeiten nicht unnötig einschränken wollen. Da ein Neustart allerdings immer einen manuellen Zugriff und eine entsprechende Fehlersuche erfordert, können wir eine Wiederherstellung eines ausgefallenen Servers nur zu unseren regulären Arbeitszeiten gewährleisten.</p> <p>Solltet ihr unerwarteterweise (siehe “Wie erfahre ich ab wann der Servertest verfügbar ist?”) nicht auf den Testserver zugreifen können, sagt bitte kurz in der Newsgroup Bescheid. Notwendige Wartungen am Server kündigen wir dort selbstverständlich immer an, ebenso, wenn wir einen ausgefallenen Server wiederhergestellt haben.</p> <h2>Abnahmen</h2> <h3>Wie finde ich meinen Abnahmetermin?</h3> <p>Ihr habt euch verbindlich für einen Termin im Online-Sekretariat angemeldet, dieser gilt dann für eure Abnahmen (sofern ihr nicht mit uns per E-Mail einen anderen Termin vereinbart habt, dann gilt natürlich dieser Termin). Aus diesem Termin ergibt sich Wochentag und Zeitslot für eure Abnahme, das konkrete Datum der jeweiligen Abnahme ergibt sich aus unserem Kalender.</p> <h3>Meine Abnahme startet nicht wie erwartet. Was mache ich jetzt?</h3> <p>Prüft bitte, ob es sich auch um den richtigen Tag, die richtige Uhrzeit und das richtige Datum für eure Abnahme handelt. In Unix finden die Abnahmen nach A-/B-Terminen wochenweise verschränkt statt, prüft also bitte kurz, ob das auch wirklich die richtige Woche für euren Termin ist.</p> <p>Wenn ihr in einem Termin als zweite Gruppe dran seid, solltet ihr von eurem Abnehmer eine entsprechende Nachricht im Chat für eure Gruppe erhalten haben. Bitte geduldet euch dann noch - die Dauer einer Abnahme ist im Vorwege kaum absehbar und wir sind natürlich bestrebt allen Gruppen individuell gerecht zu werden.</p> <p>Solltet ihr euch wirklich sicher sein, dass wir euch vergessen haben - und auch wirklich nur dann - schreibt bitte in eurem privaten Kanal eine Nachricht mit dem Präfix <html><body><code class="highlight">@channel</code></body></html> gefolgt von einem Leerzeichen und einem entsprechenden Hinweis. (In jedem anderen Fall werten wir eine solche Notation als Störung und werden entsprechend darauf reagieren.)</p> <h3>Ich habe meine Abnahme verpasst.</h3> <p>Da Abnahmen sowohl Termine mit Anwesenheitspflicht als auch Prüfungen sind, führt ein unentschuldigtes Nicht-Erscheinen zur Abnahme automatisch zum Nicht-Bestehen der entsprechenden Aufgabe und damit für FH-Teilnehmer im Zweifelsfall (also außer bei Unix Aufgabe 1) auch zum Nicht-Bestehen der gesamten Übung.</p> <p>Solltet ihr euch lediglich verspätet haben, aber noch innerhalb des Abnahmetermins da sein, meldet euch bitte über die <html><body><code class="highlight">@channel</code></body></html> Notation in eurem Kanal, siehe vorheriger Punkt bei uns. </p> <p>Für die genauen Regelungen, was die Anwesenheitspflicht angeht, konsultiert bitte unsere Regularien.</p> <h2>Sonstiges</h2> <h3>Mein Gruppenpartner ist total unzuverlässig (nicht erreichbar, lässt mich alle Arbeit machen, etc.).</h3> <p>Bitte schreib uns schnellstmöglich eine E-Mail an den entsprechenden Verteiler (siehe Kommunikationskanäle) und schildere uns das Problem. Wir werden die Gruppe dann im Zweifelsfall auftrennen.</p> <h3>Ich habe vergessen meine Daten rechtzeitig einzuchecken oder zum Severtestzeitpunkt war eine nicht-funktionale Lösung im Repo.</h3> <p>Da können wir leider nichts machen - euer Repo in einem ordentlichen Zustand zu halten und das zu überprüfen, ist allein eure Verantwortung. Für alle Gruppen gilt stets ein und derselbe Testzeitpunkt und davon können und würden wir, selbst wenn wir könnten, nicht abweichen. Das gilt auch, wenn ihr zu einem früheren Zeitpunkt schon eine funktionale Lösung eingecheckt und selbst getestet hattet.</p> <h3>Ich hab das FAQ komplett gelesen und jetzt traue ich mich nicht mehr euch was zu fragen.</h3> <p>Die hier beschriebenen Regeln sind ja genau dafür gedacht, dass ihr Fragen stellen könnt und wir euch zu diesen Fragen die bestmögliche Betreuung liefern können. Es gibt also gar keinen Grund eine Frage nicht zu stellen. ;)</p>`; // Reset `lastIndex` if this regex is defined globally // regex.lastIndex = 0; let m; if ((m = regex.exec(str)) !== null) { // The result can be accessed through the `m`-variable. m.forEach((match, groupIndex) => { console.log(`Found match, group ${groupIndex}: ${match}`); }); }

Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for JavaScript, please visit: https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions