Regex suchen und ersetzen, und die Muster, die sich lohnen

Die zwei Felder, was $1 macht, und achtzehn Muster, die vor dem Veröffentlichen durch die Engine gelaufen sind.

Ein Regex-Ersetzen sind zwei Felder. Pattern ist, was gesucht wird, Replacement ist, was an die Stelle kommt, und $1 in der Ersetzung meint das, was die erste Klammer eingefangen hat. ^([^.]+)\..*$ mit $1 macht aus servername.internal.domain.local ein servername.

Das ist die ganze Idee. Der Rest dieser Seite ist eine Tabelle mit Mustern zum Abschreiben, und danach, für alle, die Muster nicht mehr kopieren, sondern schreiben wollen, wie man eines liest.

Die kurze Fassung

  • $1, $2 setzen wieder ein, was die Klammern eingefangen haben, von links nach rechts. $0 ist der ganze Treffer.
  • Ein leeres Replacement löscht, was gefunden wurde.
  • Ersetzt wird jeder Treffer, nicht nur der erste.
  • Groß und klein wird unterschieden, bis du Ignore case ankreuzt oder das Muster mit (?i) beginnst.
  • ^ und $ meinen Anfang und Ende des GANZEN Textes. Für Anker je Zeile beginn das Muster mit (?m).
  • Ein Punkt passt auf jedes Zeichen. Für einen echten Punkt schreib \..

Muster zum Abschreiben

Jedes davon ist durch die Engine gelaufen, bevor es auf diese Seite kam, und die Spalte Beispiel ist das, was tatsächlich herauskam. Wo das Ergebnis auf mehreren Zeilen landet, zeigt die Spalte Beispiel diese Zeilen.

AufgabePatternReplacementBeispiel
Hostname aus einem FQDN^([^.]+)\..*$$1servername.internal.domain.local → servername
Jede URL auf ihre Domain kürzen^https?://(?:www\.)?([^/\s?#]+).*$$1https://www.klipto.me/guides/regex-replace/?ref=x → klipto.me
Letztes Stück eines Pfades.*/([^/]+)/?$$1/users/42/orders/8891/ → 8891
E-Mail-Adresse aus einem Satz.*?([\w.+-]+@[\w-]+\.[\w.]+).*$1Write to [email protected] today → [email protected]
Datum umstellen(\d{4})-(\d{2})-(\d{2})$3.$2.$1due 2026-09-18 → due 18.09.2026
Nachname zuerst^(\w+)\s+(\w+)$$2, $1Antony Kors → Kors, Antony
Telefonnummer auf Ziffern[^\d+](leer)+1 (415) 555-0132 → +14155550132
Nur die Zahl behalten[^\d.](leer)Total: $1,299.00 USD → 1299.00
Listennummern weg(?m)^\d+[.)]\s+(leer)1. Install Klipto → Install Klipto
Zeitstempel am Anfang weg^\[?(\d{2}:\d{2}:\d{2})\]?\s*(leer)[12:03:44] server restarted → server restarted
Reihen von Leerzeichen zusammenziehen[ \t]{2,}ein Leerzeichenname value → name value
Leerzeichen am Zeilenende abschneiden(?m)[ \t]+$(leer)"total: 42 " → "total: 42"
Leerzeilen auf eine kürzen\n{3,}zwei Zeilenumbrücheintro



body

intro

body
Typografische Anführungszeichen zu geraden[“”‘’]"“hello” → "hello"
HTML-Tags entfernen<[^>]+>(leer)<p>Hi <b>you</b></p> → Hi you
Markdown-Links auf ihren Text\[([^\]]+)\]\([^)]+\)$1see [the guide](https://klipto.me/x/) → see the guide
Komma-Liste zu einer Zeile je Eintrag,\s*ein Zeilenumbruchred, green, blue

red
green
blue
Ein Wort überall schreien lassen(?i)\berror\bERRORError, then error → ERROR, then ERROR
Jeden Link aus einem Block werfen\s*https?://\S+(leer)read https://a.io/x then stop → read then stop
Die Daten in einem Protokoll finden\d{4}-\d{2}-\d{2}<date>from 2026-09-18 to 2026-10-01 → from <date> to <date>
Die IPv4-Adressen in einem Protokoll finden(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)<ip>from 10.0.0.1 to 192.168.247.209 → from <ip> to <ip>
Das # an Hex-Farben wieder anbringen#?\b([a-fA-F0-9]{6}|[a-fA-F0-9]{3})\b#$14F46E5 and fff → #4F46E5 and #fff
Eine E-Mail fürs Bildschirmfoto maskieren([\w.+-])[\w.+-]*(@.*)$1***$2[email protected] → a***@klipto.me
Das Aufzählungszeichen jeder Zeile abschneiden(?m)^\s*[-*•]\s+(leer)- ship the guide → ship the guide

Wie man ein Muster liest

Zeichen stehen für sich selbst, bis sie es nicht tun. Buchstaben und Ziffern passen auf sich selbst. Diese zwölf tun etwas anderes: . ^ $ * + ? ( ) [ ] { } \ |. Ein Backslash davor meint das Zeichen selbst, \. ist also ein Punkt und \$ ein Dollarzeichen.

Eckige Klammern wählen aus einer Menge. [abc] ist einer dieser drei Buchstaben. [a-z] ist ein kleiner Buchstabe, [0-9] eine Ziffer. Ein ^ in den Klammern dreht es um: [^.] ist jedes Zeichen, das kein Punkt ist, und genau das lässt das Hostname-Muster am ersten Punkt aufhören.

Kürzel decken die häufigen Mengen ab. \d ist eine Ziffer, \w ein Buchstabe, eine Ziffer oder ein Unterstrich, \s ist Leerraum. Die Großbuchstaben sind das Gegenteil: \D ist alles, was keine Ziffer ist.

Quantoren sagen, wie viele. * ist keinmal oder öfter, + einmal oder öfter, ? keinmal oder einmal, {3} genau dreimal und {2,} zweimal oder öfter. Sie gelten für das Zeichen davor, \d{4} sind also vier Ziffern und [a-z]+ eine Reihe Buchstaben.

Gierig ist die Voreinstellung, und das ist die übliche Überraschung. .* nimmt so viel wie möglich und gibt nur zurück, was es muss. In <p>Hallo <b>du</b></p> passt <.*> auf die ganze Zeile statt auf ein Tag. Ein ? macht den Quantor genügsam: <.*?> hört beim ersten > auf. [^>]+ ist noch strenger und schneller, deshalb steht es im Rezept fürs Tag-Entfernen.

Runde Klammern fangen auch ein. Was in ( ) steht, wird gemerkt und kommt als $1, $2 und so weiter zurück, nummeriert nach der öffnenden Klammer. So dreht das Datums-Rezept drei Gruppen um, ohne das Datum zu kennen.

Anker heften den Treffer fest. ^ ist der Anfang, $ das Ende, und \b ist eine Wortgrenze, weshalb \berror\b das Wort errors in Ruhe lässt. In dieser Engine meinen ^ und $ von Haus aus Anfang und Ende des ganzen kopierten Textes. Ein Protokoll aus drei Zeilen ist eine Zeichenkette, ein Muster aus deinem Editor findet hier also womöglich nichts, bis (?m) davorsteht.

| heißt oder, und Klammern fassen es zusammen. (jpg|png|gif) passt auf jedes der drei. Ohne Klammern schluckten die Alternativen alles links und rechts davon.

Die Zeichen auf einen Blick. ^ Anfang, $ Ende, . jedes Zeichen, \d Ziffer, \D keine Ziffer, \w Buchstabe, Ziffer oder Unterstrich, \s Leerraum, + einmal oder öfter, * keinmal oder öfter, ? keinmal oder einmal, {2,} zweimal oder öfter, [abc] eines davon, [^abc] alles außer diesen, (…) einfangen, (?:…) gruppieren ohne einzufangen, \b Wortgrenze, | oder, \ das nächste Zeichen entwerten.

Muster zum Prüfen statt zum Ersetzen

Die bekanntesten regulären Ausdrücke sind Prüfer: Ist das eine E-Mail-Adresse, ist das eine echte IP. Ein Umwandlungs-Schritt ersetzt aber immer, ein Prüfer allein tut hier also nichts. Die Formen lohnen sich trotzdem, denn dasselbe Muster, das einen Wert prüft, holt ihn auch heraus oder maskiert ihn.

E-Mail. ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ ist die alltägliche Prüfung: Wort, @, Domain, Punkt, Zone. Für einen Ersetzen-Schritt lass die Anker weg und fang stattdessen ein, wie es die E-Mail-Zeile in der Tabelle oben macht.

Telefon in E.164. ^\+?[1-9]\d{1,14}$ nimmt +79991234567 an und weist eine Nummer mit Leerzeichen ab. Um diese Form herzustellen statt sie zu prüfen, wirf mit [^\d+] alles andere weg.

Passwortstärke. ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$ verlangt acht Zeichen mit mindestens einem kleinen Buchstaben, einem großen und einer Ziffer. Die Teile (?=…) sind Vorausschauen: sie prüfen, ohne etwas zu verbrauchen, und nur so kann ein Muster drei Dinge auf einmal fordern.

IPv4, streng. (?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?) hält jedes Oktett zwischen 0 und 255. Achte auf die mittlere Alternative: 2[0-4]\d deckt 200 bis 249 ab, und eine Fassung mit 2[0-4][0-6] überspringt stillschweigend Adressen wie 192.168.247.209. Wenn der Text ein Protokoll ist und keine fremde Eingabe, reicht \b(?:\d{1,3}\.){3}\d{1,3}\b.

Hex-Farbe. #?\b([a-fA-F0-9]{6}|[a-fA-F0-9]{3})\b passt auf #4F46E5 und auf fff, und die Gruppe ist da, damit eine Ersetzung sie alle auf eine Form bringen kann.

Zwei Fallen bei Mustern aus dem Netz. Die Anker: ^…$ meint den ganzen kopierten Text, ein Prüfer findet also nichts mitten in einem Satz, solange sie drinstehen. Und die Lage der Klammer: https?://([^/\s]+)\.[a-z]{2,} lässt die Zone außerhalb der Gruppe, $1 liefert also blog.klipto ohne das .me.

Die fünf Fehler, die einen Nachmittag kosten

.* hat die Zeile gefressen. Mach es genügsam mit .*?, oder sag, was du meinst, mit einer verneinten Menge wie [^>]+.

Die Anker haben nichts getan. (?m) an den Anfang des Musters, jedes Mal, wenn du zeilenweise arbeitest.

\1 in der Ersetzung. Das ist die Schreibweise von sed und Python. Hier heißt es $1, wie in JavaScript und Swift.

Ein Punkt ohne Backslash passte auf alles. 1.5 passt auch auf 125. Schreib 1\.5.

Groß und klein. Error ist nicht error. Kreuz Ignore case an oder schreib (?i) an den Anfang.

Wo du das eintippst

Klipto führt Regex-Ersetzungen auf dem Text aus, den du gerade kopiert hast, als Schritt in einem Umwandlungs-Chip. Einstellungen → Vorschau und Umwandlungen → Inhaltstyp wählen → eigene Umwandlung anlegen → Schritt hinzufügen → Regex-Ersetzen. Pattern und Replacement sind die zwei Felder, daneben sitzt das Kreuz für Ignore case, und darunter rechnet ein Feld die ganze Kette an deinem eigenen Beispiel mit, während du tippst.

Schritte laufen von oben nach unten, auf ein Regex kann also UPPERCASE folgen oder Un-HTML vorausgehen. Die Kette sitzt danach als Chip in der Vorschau. Umwandlungs-Chips beschreibt, wie du sie baust und ordnest.

Der Editor für Umwandlungen in Klipto: ein Regex-Schritt, ein zweiter Schritt und darunter ein lebendiges Beispiel
Zwei Schritte ergeben einen Chip namens Domain: das Muster behält den Host aus jeder URL, dann schreibt UPPERCASE ihn groß. Try it rechnet die Kette an deinem eigenen Beispiel mit, ein Muster, das fast stimmt, verrät sich also, bevor es den Chip gibt.

Die Engine ist ICU, über NSRegularExpression, also die, die Swift und Objective-C auf dem Mac benutzen. Muster aus der JavaScript-Welt laufen fast immer unverändert. Muster aus sed oder Python brauchen $1 statt \1 in der Ersetzung.

Häufige Fragen

Was bedeutet $1 in der Ersetzung?

Es setzt wieder ein, was die erste Klammergruppe eingefangen hat. $2 ist die zweite Gruppe, $0 der ganze Treffer. Gruppen werden nach ihrer öffnenden Klammer von links nach rechts nummeriert.

Wie lösche ich Text, der auf ein Muster passt?

Lass das Feld Replacement leer. Jeder Treffer wird entfernt, und nichts kommt an seine Stelle.

Warum greift mein Muster nicht am Anfang jeder Zeile?

Von Haus aus hängen ^ und $ am ganzen Text. Schreib (?m) an den Anfang des Musters, dann hängen sie an jeder Zeile.

Heißt es $1 oder \1 in der Ersetzung?

Hier $1. Die Schreibweise mit Backslash gehört zu sed, Python und ein paar Editoren, und sie erschiene wörtlich im Ergebnis.

Wie treffe ich einen echten Punkt oder eine Klammer?

Mit einem Backslash davor: \., \(, \[. Ohne ihn passt ein Punkt auf jedes Zeichen, und Klammern bedeuten Gruppierung.

Weiterlesen

Mach aus einem Muster einen Chip für das nächste Einfügen. Klipto laden.

0

Hör auf, dasselbe zweimal zu kopieren. Klipto laden.

Lokal · keine Karte, kein Konto · macOS 14+ · 7.5 MB