Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ regexpr(3G) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

ed(1)

grep(1)

regcmp(1)

sed(1)

regex(3)

regcomp(3C)

regcmp(3G)

expressions(5)

regex(5)

regexp(5)

regexpr(3G)                                                     regexpr(3G)

NAME
     regexpr: compile, step, advance, loc1, loc2, locs, nbra, regerrno,
     reglength, braslist, braelist - Regulären Ausdruck übersetzen und
     anwenden

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

     #include <regexpr.h>

     char *compile(const char *instring, char *expbuf, char *endbuf);

     int step(const char *string, char *expbuf);

     int advance(const char *string, char *expbuf);

     extern char *loc1, *loc2, *locs;

     extern int nbra, regerrno, reglength;

     extern char *braslist[ ], *braelist[ ];

BESCHREIBUNG
     Diese Routinen werden verwendet, um reguläre Ausdrücke zu übersetzen
     und die übersetzten Ausdrücke mit Zeilen zu vergleichen. Die übersetz-
     ten regulären Ausdrücke haben die von ed verwendete Form.

     compile() wird wie folgt verwendet:

     Der Parameter instring ist eine mit einem Nullzeichen abschließende
     Zeichenkette, die einen regulären Ausdruck repräsentiert.

     Der Parameter expbuf zeigt auf den Speicherplatz, an den der über-
     setzte reguläre Ausdruck gebracht werden soll. Wenn expbuf NULL ist,
     verwendet compile() malloc(), um Speicherplatz für den übersetzten
     regulären Ausdruck zuzuweisen. Wenn ein Fehler auftritt, wird dieser
     Platz wieder freigegeben. Es liegt in der Verantwortung des Benutzers,
     den Speicherplatz freizugeben, wenn der übersetzte reguläre Ausdruck
     nicht länger benötigt wird.

     Der Parameter endbuf zeigt auf einen Speicherplatz über der höchsten
     Adresse, an der der übersetzte reguläre Ausdruck untergebracht werden
     kann. Dieses Argument wird ignoriert, wenn expbuf NULL ist. Wenn der
     übersetzte Ausdruck nicht in (endbuf - expbuf) Bytes paßt, gibt
     compile() NULL zurück, und regerrno (siehe unten) wird auf 50 gesetzt.

     Wenn compile() Erfolg hat, gibt es einen Zeiger ungleich NULL zurück,
     dessen Wert von expbuf abhängt. Wenn expbuf ungleich NULL ist, gibt
     compile() einen Zeiger auf das Byte hinter dem letzten Byte in dem
     übersetzten regulären Ausdruck zurück. Die Länge des übersetzten regu-
     lären Ausdrucks wird in reglength gespeichert. Sonst gibt compile()
     einen Zeiger auf den von malloc() zugewiesenen Speicherplatz zurück.



Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

regexpr(3G)                                                     regexpr(3G)

     Wenn beim Übersetzen des regulären Ausdrucks ein Fehler entdeckt wird,
     wird von compile() ein Nullzeiger zurückgegeben, und regerrno wird auf
     einen der unten angezeigten Fehlernummern ungleich Null gesetzt:

     FEHLER         BEDEUTUNG

     11             zu großer Endpunkt des Bereichs
     16             falsche Zahl
     25             \Ziffer außerhalb des Gültigkeitsbereich
     36             ungültiger oder fehlender Begrenzer
     41             keine gespeicherte Suchfolge
     42             \( \) nicht ausgeglichen
     43             zu viele \(
     44             mehr als 2 Zahlen in \{ \}\
     45             } nach \ erwartet
     46             erste Zahl ist größer als zweite in \{ \}
     49             [ ] nicht ausgeglichen
     50             Überlauf des regulären Ausdrucks

     step() wird wie folgt verwendet: Der erste Parameter von step() ist
     ein Zeiger auf eine Zeichenkette, die verglichen werden soll. Die Zei-
     chenkette sollte mit einem Nullzeichen abschließen.

     Der Parameter expbuf ist der übersetzte reguläre Ausdruck, der durch
     den Aufruf der Funktion compile() erhalten wird.

     Die Funktion step() gibt einen Wert ungleich Null zurück, wenn die
     übergebene Zeichenkette auf den regulären Ausdruck paßt, und Null,
     wenn das nicht der Fall ist. Wenn der Vergleich paßt, werden zwei
     externe Zeichen-Zeiger als Nebeneffekt des step()-Aufrufs gesetzt. Die
     in step() gesetzte Variable ist loc1. loc1 ist ein Zeiger auf das
     erste Zeichen, das auf den regulären Ausdruck paßt. Die Variable loc2
     zeigt auf das Zeichen hinter dem letzten Zeichen, das auf den regulä-
     ren Ausdruck paßt. Wenn also der reguläre Ausdruck auf die ganze Zeile
     paßt, zeigt loc1 auf das erste Zeichen von string, und loc2 zeigt auf
     das Nullzeichen am Ende von string.

     Der Zweck von step() besteht darin, schrittweise durch das Argument
     string zu laufen, bis ein passendes Zeichen gefunden wird oder bis das
     Ende von string erreicht wird.  Wenn der reguläre Ausdruck mit ^
     beginnt, versucht step() den Vergleich mit dem regulären Ausdruck nur
     am Anfang der Zeichenkette.

     Die Funktion advance() hat dieselben Argumente und Nebeneffekte wie
     step(), aber diese Funktion schränkt den Vergleich immer auf den
     Anfang der Zeichenkette ein.

     Wenn man nach aufeinanderfolgenden Mustern in derselben Zeichenkette
     sucht, sollte locs auf denselben Wert wie loc2 gesetzt werden, und
     step() sollte mit string gleich loc2 aufgerufen werden. locs wird von
     Kommandos wie ed und sed verwendet, so daß globale Ersetzungen wie
     s/y*//g nicht endlos laufen, und ist standardmäßig NULL.


Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

regexpr(3G)                                                     regexpr(3G)

     Die externe Variable nbra wird verwendet, um die Anzahl von Unteraus-
     drücken in dem übersetzten regulären Ausdruck zu bestimmen. braslist
     und braelist sind Felder von Zeigern auf Zeichen, die auf den Anfang
     und das Ende der nbra-Unterausdrücke in der passenden Zeichenkette
     zeigen. So zeigt zum Beispiel nach dem Aufruf von step() oder
     advance() mit der Zeichenkette sabcdefg und dem regulären Ausdruck
     \(abcdef\), braslist[0] auf a und braelist[0] auf g. Diese Felder wer-
     den von Kommandos wie ed und sed verwendet, um wiederholte Ersetzungen
     mit Mustern durchzuführen, die die Notation \n für Unterausdrücke ent-
     halten.

     Beachten Sie, daß es nicht notwendig ist, die externen Variablen
     regerrno, nbra, loc1, loc2, locs, braelist und braslist zu verwenden,
     wenn man nur überprüfen möchte, ob eine Zeichenkette auf einen regulä-
     ren Ausdruck paßt oder nicht.

BEISPIELE
     Folgender Programmauszug entspricht dem regulären Ausdruck von grep:

     #include <regexpr.h>

     . . .
     if(compile(*argv, (char *)0, (char *)0) == (char *)0)
           regerr(regerrno);
     . . .
     if (step(linebuf, expbuf))
           succeed();

HINWEISE
     Wenn Sie eine dieser Funktionen verwenden, müssen Sie bei der Überset-
     zung die Bibliothek libgen dazubinden (cc -lgen).

SIEHE AUCH
     ed(1), grep(1), regcmp(1), sed(1), regex(3), regcomp(3C), regcmp(3G),
     expressions(5), regex(5), regexp(5).



















Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

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