.\" -*- coding: UTF-8 -*- .\" Copyright (C), 1995, Graeme W. Wilford. (Wilf.) .\" .\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one. .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" %%%LICENSE_END .\" .\" Wed Jun 14 16:10:28 BST 1995 Wilf. (G.Wilford@ee.surrey.ac.uk) .\" Tiny change in formatting - aeb, 950812 .\" Modified 8 May 1998 by Joseph S. Myers (jsm28@cam.ac.uk) .\" .\" show the synopsis section nicely .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH REGEX 3 "13. August 2020" GNU Linux\-Programmierhandbuch .SH BEZEICHNUNG regcomp, regexec, regerror, regfree \- Regulärer\-Ausdruck\-Funktionen gemäß POSIX .SH ÜBERSICHT .nf \fB#include \fP .PP \fBint regcomp(regex_t *\fP\fIpreg\fP\fB, const char *\fP\fIregaus\fP\fB, int \fP\fIkschalter\fP\fB);\fP .PP \fBint regexec(const regex_t *\fP\fIpreg\fP\fB, const char *\fP\fIzeichenkette\fP\fB, size_t \fP\fIntreffer\fP\fB,\fP \fB regmatch_t \fP\fIptreffer[]\fP\fB, int \fP\fIaschalter\fP\fB);\fP .PP \fBsize_t regerror(int \fP\fIfehlercode\fP\fB, const regex_t *\fP\fIpreg\fP\fB, char *\fP\fIfehlerpuf\fP\fB,\fP \fB size_t \fP\fIfehlerpufgröße\fP\fB);\fP .PP \fBvoid regfree(regex_t *\fP\fIpreg\fP\fB);\fP .fi .SH BESCHREIBUNG .SS "Kompilierung regulärer Ausdrücke gemäß POSIX" \fBregcomp\fP() wird zur Kompilierung eines regulären Ausdrucks in eine Form verwandt, die für nachfolgende \fBregexec\fP()\-Suchen geeignet ist. .PP \fBregcomp\fP() wird \fIpreg\fP, ein Zeiger auf einen Musterpuffer\-Speicherbereich, \fIregaus\fP, ein Zeiger auf eine Zeichenkette mit Nullbyte am Ende und \fIkschalter\fP, Schalter zur Bestimmung des Typs der Kompilierung, übergeben. .PP Eine Suche mit regulären Ausdrücken muss mittels kompilierter Musterpuffer erfolgen, daher muss \fBregexec\fP() immer die Adresse eines \fBregcomp\fP()\-initialisierten Musterpuffers bereitgestellt werden. .PP \fIkschalter\fP ist das bitweises \fIODER\fP von null oder mehr der Folgenden: .TP \fBREG_EXTENDED\fP Die Syntax der erweiterten regulären Ausdrücke gemäß \fBPOSIX\fP bei der Interpretation von \fIregaus\fP verwenden. Falls nicht gesetzt, werden die grundlegenden regulären Ausdrücke gemäß \fBPOSIX\fP verwandt. .TP \fBREG_ICASE\fP Keine Unterscheidung der Groß\-/Kleinschreibung durchführen. Nachfolgende \fBregexec\fP()\-Suchen mit diesem Musterpuffer werden die Groß\-/Kleinschreibung ignorieren. .TP \fBREG_NOSUB\fP Positionen von Treffern nicht berichten. Die Argumente \fIntreffer\fP und \fIptreffer\fP von \fBregexec\fP() werden ignoriert, falls der übergebene Musterpuffer mit diesem gesetztem Schalter kompiliert wurde. .TP \fBREG_NEWLINE\fP Passt\-auf\-jedes\-Zeichen\-Operator passt nicht auf einen Zeilenumbruch. .IP Eine Liste nichtpassender Zeichen (\fB[\(ha…]\fP), die keinen Zeilenumbruch enthält, passt nicht auf einen Zeilenumbruch. .IP Passt\-auf\-Zeilenanfang\-Operator (\fB\(ha\fP) passt auf die leere Zeichenkette direkt nach einem Zeilenumbruch, unabhängig davon, ob die Ausführungsschalter von \fBregexec\fP() (\fIeflags\fP) \fBREG_NOTBOL\fP enthalten. .IP Passt\-auf\-Zeilenende\-Operator (\fB$\fP) passt auf die leere Zeichenkette direkt vor einem Zeilenumbruch, unabhängig davon, ob \fIeflags\fP \fBREG_NOTEOL\fP enthält. .SS "Vergleiche POSIX\-regulärer Ausdrücke" \fBregexec\fP() wird zum Vergleich einer auf Nullbyte endenden Zeichenkette mit dem vorkompilierten Musterpuffer \fIpreg\fP verwandt. \fIntreffer\fP und \fIptreffer\fP werden zur Bereitstellung von Informationen bezüglich der Position von Treffern verwandt. \fIaschalter\fP ist das bitweise \fBODER\fP von null oder mehreren der folgenden Schalter: .TP \fBREG_NOTBOL\fP Der Passt\-auf\-Zeilenanfang\-Operator schlägt bei Vergleich immer fehl (siehe aber auch obigen Kompilierungsschalter \fBREG_NEWLINE\fP). Dieser Schalter kann verwandt werden, wenn verschiedene Anteile einer Zeichenkette an \fBregexec\fP() übergeben werden und der Anfang einer Zeichenkette nicht als Anfang einer Zeile interpretiert werden soll. .TP \fBREG_NOTEOL\fP Der Passt\-auf\-Zeilenende\-Operator schlägt bei Vergleich immer fehl (siehe aber auch obigen Kompilierungsschalter \fBREG_NEWLINE\fP). .TP \fBREG_STARTEND\fP \fIptreffer[0]\fP als Eingabezeichenkette, beginnend bei Byte \fIptreffer[0].rm_so\fP und endend by Byte \fIptreffer[0].rm_eo\fP, verwenden. Dies ermöglicht den Vergleich eingebetteter Nullbytes und vermeidet ein \fBstrlen\fP(3) bei großen Zeichenketten. Es verwendet bei der Eingabe \fIntreffer\fP nicht und ändert die Verarbeitung \fBREG_NOTBOL\fP oder \fBREG_NEWLINE\fP nicht. Dieser Schalter ist eine BSD\-Erweiterung, nicht in POSIX vorhanden. .SS Byte\-Versätze Es ist möglich, die Übereinstimmungs\-Adressierungsinformationen zu erhalten, falls nicht \fBREG_NOSUB\fP für die Kompilierung des Musterpuffers verwandt wurde. \fIptreffer\fP muss so dimensoniert sein, dass es mindestens \fIntreffer\fP Elemente enthält. Diese werden durch \fBregexec\fP() durch Teilzeichenketten\-Übereinstimmungsadressen gefüllt. Die Versätze des bei der \fIi\fPten offenen Klammer beginnenden Unterausdrucks werden in \fIptreffer[i]\fP gespeichert. Die Übereinstimmungsadresse des gesamten regulären Ausdrucks wird in \fIptreffer[0]\fP gespeichert. (Beachten Sie, dass \fIptreffer\fP mindestens \fIN+1\fP sein muss, um den Versatz des \fIN\fPten Unterausdruckstreffers zurückzuliefern.) Alle nicht verwandten Strukturelemente werden den Wert \-1 enthalten. .PP Die Struktur \fIregmatch_t\fP, die der Typ von \fIptreffer\fP ist, wird in \fI\fP definiert. .PP .in +4n .EX typedef struct { regoff_t rm_so; regoff_t rm_eo; } regmatch_t; .EE .in .PP Jedes Element \fIrm_so\fP, das nicht \-1 ist, zeigt den Startversatz des nächsten größten Teilzeichenkettentreffers innerhalb der Zeichenkette an. Das relative Element \fIrm_eo\fP zeigt den Endversatz des Treffers an; dies ist das erste Zeichen nach dem übereinstimmenden Text. .SS "Fehlerberichterstattung gemäß POSIX" Zur Umwandlung der von \fBregcomp\fP() und \fBregexec\fP() zurückgelieferten Fehlercodes in Fehlermeldungszeichenketten wird \fBregerror\fP() verwandt. .PP \fBregerror\fP() wird der Fehlercode \fIfehlercode\fP, der Musterzeichenkettenpuffer \fIpreg\fP, ein Zeiger auf einen Zeichenkettenpuffer \fIfehlerpuf\fP und die Größe des Zeichenkettenpuffers \fIfehlerpufgröße\fP übergeben. Sie liefert die Größe des \fIfehlerpuf\fP zurück, die benötigt wird, um die mit Nullbyte abgeschlossene Fehlermeldungszeichenkette zu enthalten. Falls sowohl \fIfehlerpuf\fP als auch \fIfehlerpufgröße\fP von null verschieden sind, wird \fIfehlerpuf\fP mit den ersten \fIfehlerpufgröße \- 1\fP Zeichen der Fehlermeldung und einem abschließenden Nullbyte (»\e0«) aufgefüllt. .SS "Musterpufferfreigabe gemäß POSIX" Wird \fBregfree\fP() ein vorkompilierter Puffer, \fIpreg\fP, bereitgestellt, dann wird es den vom Musterpuffer durch den Kompilierprozess \fBregcomp\fP() belegten Speicher freigeben. .SH RÜCKGABEWERT \fBregcomp\fP() liefert Null bei einer erfolgreichen Kompilierung oder einen Fehlercode bei einem Fehlschlag zurück. .PP \fBregexec\fP() liefert Null bei einem erfolgreichen Treffer oder \fBREG_NOMATCH\fP bei einem Fehlschlag zurück. .SH FEHLER Von \fBregcomp\fP() können die folgenden Fehler zurückgeliefert werden: .TP \fBREG_BADBR\fP Ungültige Verwendung des Rückwärtsverweis\-Operators. .TP \fBREG_BADPAT\fP Ungültige Verwendung des Muster\-Operators (wie Gruppierung oder Liste). .TP \fBREG_BADRPT\fP Ungültige Verwendung des Wiederholungs\-Operators wie die Verwendung von »*« als erstes Zeichen. .TP \fBREG_EBRACE\fP Fehlender öffenender oder schließender Intervall\-Operator (geschweifte Klammer). .TP \fBREG_EBRACK\fP Fehlender öffenender oder schließender Listen\-Operator (eckige Klammer). .TP \fBREG_ECOLLATE\fP Ungültiges Sortierelement. .TP \fBREG_ECTYPE\fP Unbekannter Zeichenklassenname. .TP \fBREG_EEND\fP Nichtspezifizierter Fehler. Dies wird durch POSIX.2 nicht definiert. .TP \fBREG_EESCAPE\fP Abschließender Rückwärtsschrägstrich. .TP \fBREG_EPAREN\fP Fehlender öffenender oder schließender Gruppen\-Operator (runde Klammer). .TP \fBREG_ERANGE\fP Ungültige Verwendung des Bereichs\-Operators; beispielsweise tritt der Endpunkt des Bereichs vor dem Anfangspunkt auf. .TP \fBREG_ESIZE\fP Kompilierte reguläre Ausdrücke benötigen einen Musterpuffer, der größer als 64\ kB ist. Dies ist in POSIX.2 nicht definiert. .TP \fBREG_ESPACE\fP Die Routinen für reguläre Ausdrücke hatten nicht genug Speicher. .TP \fBREG_ESUBREG\fP Ungültige Rückwärtsreferenz auf einen Unterausdruck. .SH ATTRIBUTE Siehe \fBattributes\fP(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke. .TS allbox; lbw20 lb lb l l l. Schnittstelle Attribut Wert T{ \fBregcomp\fP(), \fBregexec\fP() T} Multithread\-Fähigkeit MT\-Safe locale T{ \fBregerror\fP() T} Multithread\-Fähigkeit MT\-Safe env T{ \fBregfree\fP() T} Multithread\-Fähigkeit MT\-Safe .TE .SH "KONFORM ZU" POSIX.1\-2001, POSIX.1\-2008. .SH BEISPIELE .EX #include #include #include #include #define ARRAY_SIZE(arr) (sizeof((arr)) / sizeof((arr)[0])) static const char *const str = "1) John Driverhacker;\en2) John Doe;\en3) John Foo;\en"; static const char *const re = "John.*o"; int main(void) { static const char *s = str; regex_t regex; regmatch_t pmatch[1]; regoff_t off, len; if (regcomp(®ex, re, REG_NEWLINE)) exit(EXIT_FAILURE); printf("Zeichenkette = \e"%s\e"\en", str); printf("Treffer:\en"); for (int i = 0; ; i++) { if (regexec(®ex, s, ARRAY_SIZE(pmatch), pmatch, 0)) break; off = pmatch[0].rm_so + (s \- str); len = pmatch[0].rm_eo \- pmatch[0].rm_so; printf("#%d:\en", i); printf("Versatz = %jd; length = %jd\en", (intmax_t) off, (intmax_t) len); printf("Teilzeichenkette = \e"%.*s\e"\en", len, s + pmatch[0].rm_so); s += pmatch[0].rm_eo; } exit(EXIT_SUCCESS); } .EE .SH "SIEHE AUCH" \fBgrep\fP(1), \fBregex\fP(7) .PP Das Handbuch der Glibc, Abschnitt \fIRegular Expressions\fP .SH KOLOPHON Diese Seite ist Teil der Veröffentlichung 5.10 des Projekts Linux\-\fIman\-pages\fP. Eine Beschreibung des Projekts, Informationen, wie Fehler gemeldet werden können, sowie die aktuelle Version dieser Seite finden sich unter \%https://www.kernel.org/doc/man\-pages/. .PP .SH ÜBERSETZUNG Die deutsche Übersetzung dieser Handbuchseite wurde von Helge Kreutzmann erstellt. .PP Diese Übersetzung ist Freie Dokumentation; lesen Sie die .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3 .UE oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen. .PP Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die .MT debian-l10n-german@lists.debian.org Mailingliste der Übersetzer .ME .