Home > Hobbies > Sammlung von Regular Expressions

Sammlung von Regular Expressions

Regular Expressions (RegExp) sind zwar unglaublich praktisch und mächtig, aber oft auch etwas trickreich. Um nicht immer wieder herumprobieren zu müssen, sammle ich sie hier.

RegExpBeschreibung
/[^\r]$Sucht alle Zeilen, die kein Carriage-Return-Zeichen am Ende haben
:%s/\(<A .*><IMG .*align="\([[:alpha:]]*\)".*><\/A>\)/<BR clear="\2">\1/gvi: setzt in HTML-Dateien vor alle verlinkte Bilder einen <BR>-Befehl, damit gleich ausgerichtete Bilder nicht nebeneinander stehen
^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$prüft, ob eine E-Mail-Adresse ein gültiges Format hat (von Kristian Köhntopp aus de.comp.lang.php)
/<\/P>$/<\/P><\/LI>/fügt in HTML, das z.B. StarOffice erzeugt, ein schließendes </LI>-Tag
:%s/.*latitude="\([0-9]*\)\.\([0-9]*\)" longitude="\([0-9]*\)\.\([0-9]*\)".*/\3,\4\t\1,\2/vi: extrahiert aus einer gpspoint-Datei die Koordinaten (Länge - Tabulator - Breite) und wandelt den Dezimalpunkt in ein Komma um
:%s/\([^<>]\{1,\}[^[:space:]<>]\{35,\}\)\([^[:space:]<>]\{5,\}\)/\1<WBR>\2/gvi: setzt in längeren Zeichenketten HTML-Trennzeichen <WBR> ein; erster Entwurf, noch werden keine HTML-Tags ausgespart
/^ *suchbegriff .man: um in einer langen Manpage (z.B. bash) nach einem Begriff am Zeilenanfang zu suchen (eingerückt), der sonst auch im Text vorkommt
sed -n -e 's/.*[[:space:]]\([[:alpha:]]*\&#[[:digit:]]\{3\};[[:alpha:]]*\)[[:space:]].*/\1/gp' < woerter.txt | uniq | sortsed: um aus einer HTML-Datei alle Wörter mit Sonderzeichen zu extrahieren (Bugs: es darf nur ein Sonderzeichen vorkommen)
:%s/\(\r\)<br \/>$/<br \/>\1/gvi: Frühere Versionen von PHP haben bei der Funktion nl2br() (fügt an die Zeilenumbrüche ein <br />-Tag ein) in Zusammenhang mit DOS-Zeilenumbrüchen (\r\n) den Fehler, dass das \r-Zeichen nachher vor dem br-Tag stand. Hiermit wird das korrigiert. Der Patch mit \1 statt \r ist nötig, weil sonst ein kompletter Zeilenumbruch (\r\n) eingesetzt würde.
:%s/^\(.\{80\}[^ ]*\) /\1\r/gvi: bricht lange Zeilen beim ersten Leerzeichen hinter der 80-Zeichen-Marke um