diff --git a/doc/efun/regexp b/doc/efun/regexp
index c8f8910..9dc0fed 100644
--- a/doc/efun/regexp
+++ b/doc/efun/regexp
@@ -1,62 +1,40 @@
 SYNOPSIS
+        #include <regexp.h>
+
         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.
-
-        $ 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
+EXAMPLES
         string strs;
-        if (strs = regexp(({ "Bitte helfen sie mir, Sir John." }),
-                          "\\<helfen\\>.*\\<mir\\>")) {
-           if (sizeof(strs)
-              write("Es passt.\n");
+        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 (sizeof(strs)
+                write("It matches.\n");
         }
 
-        Der regulaere Ausdruck wird den uebergebenen String (welcher in
-	einem Array verpackt wurde) daraufhin ueberpruefen, ob
-	sowas wie "helfen ... mir" darin vorkommt.
+        The regular expression will test the given string (which is
+        packed into an array) if there is something like "help ... me"
+        inside of it.
 
-GESCHICHTE
-        LDMud 3.2.9 fuegte das Sonderzeichen '+' hinzu.
+HISTORY
+        LDMud 3.3 added the optional <opt> argument.
+        Since 3.5.0 a error is raised if RE_PCRE is specified in <opt>, but
+        the driver lacks PCRE support.
 
-SIEHE AUCH
-        regexplode(E), regreplace(E), sscanf(E)
+SEE ALSO
+        regexplode(E), regmatch(E), regreplace(E), regexp_package(E), sscanf(E),
+        regexp(C)
