diff --git a/doc/efun/regexp b/doc/efun/regexp
index 354e6a6..c8f8910 100644
--- a/doc/efun/regexp
+++ b/doc/efun/regexp
@@ -1,41 +1,62 @@
 SYNOPSIS
-        #include <regexp.h>
+        string * regexp(string *list, string pattern)
 
-        string *regexp(string *list, string pattern)
-        string *regexp(string *list, string pattern, int opt)
+BESCHREIBUNG
+        Liefert ein neues Array mit all jenen Strings aus list zurueck,
+	welche auf das Muster pattern passen. Diese Funktion verwendet
+	dieselbe Syntax fuer regulaere Ausdruecke wie ed():
 
-DESCRIPTION
-        Match the pattern <pattern> (interpreted according to <opt> if
-        given) against all strings in list, and return a new array with all
-        strings that matched.
+        . Passt auf jedes beliebige Zeichen.
 
-        If there is an error in the regular expression, a runtime
-        error will be raised.
+        ^ Passt auf den Beginn einer Zeichenkette.
 
-EXAMPLE
+        $ Passt auf das Ende einer Zeichenkette.
+
+        \< Passt auf das Beginn eines Wortes.
+
+        \> Passt auf das Ende eines Wortes.
+
+        \B Passt auf eine leere Zeichenkette an einem Wortrand
+	   (sollte aehnlich wie das Symbol zur Emacs-Kompatibilitaet in
+	   GNU egrep sein), seit 3.2@249
+
+        x|y Passt entweder auf den regulaeren Ausdruck x oder y.
+
+        () Verwendet den eingeschlossenen regulaeren Ausdruck wie einen
+	   'simplen' Ausdruck.
+
+        x* Der regulaere Ausdruck x passt beliebig oft (0 oder mehr).
+
+        x+ Der regulaere Ausdruck x passt mindestens einmal (1 oder mehr).
+
+        [..] Passt auf jedes in den Klammern eingeschlossenes Zeichen.
+
+        [^ ..] Passt auf jedes Zeichen, welches nicht in den Klammern
+	       eingeschlossen ist. Das .. ist durch einzelne Zeichen oder
+	       Bereiche von Zeichen zu ersten:
+        [abc] Passt auf a, b oder c.
+        [ab0-9] Passt auf a, b, c oder eine beliebige Ziffer.
+        [^a-z] Passt auf keinen klein geschriebenen Buchstaben.
+
+        \c Passt auf das Zeichen c, selbst wenn es eines der Sonderzeichen ist.
+
+        Wenn es einen Fehler im regulaeren Ausdruck gibt, wird ein
+	Laufzeitfehler ausgeloest.
+
+BEISPIELE
         string strs;
-        string pattern;
-        
-        if (regexp_package() == RE_PCRE)
-            pattern = "\\<help\\>.*\\<me\\>";
-        else
-            pattern = "\\bhelp\\b.*\\bme\\b";
-
-        if (strs = regexp( ({"please, help me Sir John."}),
-                         , pattern
-                         ))
-        {
+        if (strs = regexp(({ "Bitte helfen sie mir, Sir John." }),
+                          "\\<helfen\\>.*\\<mir\\>")) {
            if (sizeof(strs)
-              write("It matches.\n");
+              write("Es passt.\n");
         }
 
-        The regular expression will test the given string (which is
-        packed into an array) if there is something like "help ... me"
-        inside of it.
+        Der regulaere Ausdruck wird den uebergebenen String (welcher in
+	einem Array verpackt wurde) daraufhin ueberpruefen, ob
+	sowas wie "helfen ... mir" darin vorkommt.
 
-HISTORY
-        LDMud 3.3 added the optional <opt> argument.
+GESCHICHTE
+        LDMud 3.2.9 fuegte das Sonderzeichen '+' hinzu.
 
-SEE ALSO
-        regexplode(E), regmatch(E), regreplace(E), regexp_package(E), sscanf(E),
-        regexp(C)
+SIEHE AUCH
+        regexplode(E), regreplace(E), sscanf(E)
