Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

ed(1)

regcmp(1)

regex(3)

malloc(3C)

regcomp(3C)

regexpr(3G)

expressions(5)

libgen(5)

regex(5)

regexp(5)

regcmp(3G)                                                       regcmp(3G)

NAME
     regcmp, regex - Regulären Ausdruck kompilieren und ausführen

SYNTAX
     cc [option ...] datei ... -lgen [bibliothek ...]

     #include <libgen.h>

     char *regcmp(const char *string1 , ... /*, (char *)0 */);

     char *regex(const char *re, const char *subject , ... );

     extern char *loc1;

BESCHREIBUNG
     regcmp() kompiliert einen regulären Ausdruck, der aus verketteten
     Argumenten besteht, und gibt einen Zeiger auf die kompilierte Form
     zurück. malloc(3C) wird zur Bereitstellung von Speicherplatz für die
     kompilierte Form verwendet. Der Benutzer ist für die Freigabe von
     unbenötigtem Platz verantwortlich. Eine Rückgabe NULL von regcmp()
     zeigt an, daß ein ungültiges Argument vorliegt.

     regex() sucht ein kompiliertes Muster in der Zeichenkette subject.
     Zusätzliche Argumente werden übergeben, um Rückgabewerte zu erhalten.
     Bei einem Fehler gibt regex() den Wert NULL zurück und bei Erfolg
     einen Zeiger auf das nächste Zeichen, für das keine Übereinstimmung
     gefunden wird. Ein globaler Zeichenzeiger loc1 weist auf die Stelle,
     an der die Übereinstimmung beginnt. regcmp() und regex() wurden weit-
     gehend vom Editor ed(1) übernommen, wobei Syntax und Semantik jedoch
     leicht verändert wurden. Die gültigen Symbole und ihre jeweilige
     Bedeutung sind wie folgt:

     []*.^ Diese Symbole haben dieselbe Bedeutung wie in ed(1).

     $     Entspricht dem Ende der Zeichenkette; Die Zeichenfolge \n mit
           einer Zeichenkette, entspricht einem Zeilenvorschub (NEWLINE).

     -     Das Minuszeichen in Klammern bedeutet bis einschließlich. So ist
           beispielsweise [a-z] gleichbedeutend mit [abcd...xyz]. Das -
           kann nur dann für sich selbst stehen, wenn es als das erste oder
           letzte Zeichen verwendet wird. So entspricht beispielsweise der
           Ausdruck []-] den Zeichen ] und -.

     +     Ein regulärer Ausdruck mit nachfolgendem + bedeutet einmal oder
           mehrere Male. So ist zum Beispiel [0-9]+ gleichbedeutend mit
           [0-9][0-9]*.









Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

regcmp(3G)                                                       regcmp(3G)

     {m} {m,} {m,u}
           In {} eingeschlossene ganzzahlige Werte zeigen die Häufigkeit
           an, mit der der vorangehende reguläre Ausdruck angewendet werden
           soll. Der Wert m ist die Mindestanzahl und u das Maximum. u muß
           kleiner als 256 sein. Wenn nur m vorhanden ist (z. B. {m}), wird
           damit genau angegeben, wie oft der reguläre Ausdruck angewendet
           werden soll. Der Wert {m,} ist analog zu {m,unendlich}. Die Ope-
           rationen mit dem Pluszeichen + und dem Stern * sind gleichbedeu-
           tend mit {1,} bzw. {0,}.

     ( ... )$n
           Der Wert des geklammerten regulären Ausdrucks soll zurückgegeben
           werden. Der Wert wird im (n+1)ten Argument nach dem Argument
           subject gespeichert. Es sind höchstens zehn geklammerte reguläre
           Ausdrücke zulässig. regex() führt die Zuweisungen auf jeden Fall
           aus.

     ( ... )
           Für Gruppierungen werden Klammern verwendet. Operatoren wie bei-
           spielsweise *, +, {}, können auf Einzelzeichen oder auf einen
           von Klammern umschlossenen regulären Ausdruck angewendet werden.
           Beispiel: (a*(cb+)*)$0.

     Notwendigerweise sind alle oben definierten Symbole Sonderzeichen.
     Daher müssen sie mit einem Backslash \ gekennzeichnet werden, wenn sie
     für sich stehen sollen.

BEISPIELE
     Das folgende Beispiel sucht ein führendes Zeilenvorschubzeichen in der
     Zeichenkette subject, auf die cursor zeigt.

        char *cursor, *newcursor, *ptr;
         ...
        newcursor = regex((ptr = regcmp("^\n", (char *)0)), cursor);
        free(ptr);

     Das folgende Beispiel durchsucht die Zeichenkette Testing3 nach Übe-
     reinstimmungen und gibt die Adresse des Zeichens hinter dem letzten
     übereinstimmenden Zeichen (dem Zeichen 4) zurück. Die Zeichenkette
     Testing3 wird in das Zeichen-Array ret0 kopiert.

        char ret0[9];
        char *newcursor, *name;
         ...
        name = regcmp("([A-Za-z][A-za-z0-9]{0,7})$0", (char *)0);
        newcursor = regex(name, "012Testing345", ret0);








Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

regcmp(3G)                                                       regcmp(3G)

     Bei folgendem Beispiel wird ein vorkompilierter regulärer Ausdruck in
     file.i [siehe regcmp(1)] auf string geprüft.

        #include "file.i"
        char *string, *newcursor;
         ...
        newcursor = regex(name, string);

FEHLER
     Die Funktion regcmp() kann bei folgender Bedingung fehlschlagen:

     ENOMEM    Nicht genügend Speicher verfügbar.

HINWEISE
     Das Benutzerprogramm kann möglicherweise keinen Speicherplatz mehr zur
     Verfügung stellen, wenn regcmp() iterativ ohne Freigabe der nicht mehr
     benötigten Vektoren aufgerufen wird.

     Wenn Sie eine dieser Funktionen verwenden, müssen Sie bei der Kompi-
     lierung die Bibliothek libgen anbinden (cc -lgen).

SIEHE AUCH
     ed(1), regcmp(1), regex(3), malloc(3C), regcomp(3C), regexpr(3G),
     expressions(5), libgen(5), recomp(5), regex(5), regexp(5).






























Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026