.\" -*- coding: UTF-8 -*- '\" t .\" Copyright (C), 1995, Graeme W. Wilford. (Wilf.) .\" Copyright 2023, Ahelenia Ziemiańska .\" Copyright 2023, Alejandro Colomar .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" 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 "15. Juni 2024" "Linux man\-pages 6.9.1" .SH BEZEICHNUNG regcomp, regexec, regerror, regfree \- Regulärer\-Ausdruck\-Funktionen gemäß POSIX .SH BIBLIOTHEK Standard\-C\-Bibliothek (\fIlibc\fP, \fI\-lc\fP) .SH ÜBERSICHT .nf \fB#include \fP .P \fBint regcomp(regex_t *restrict \fP\fIpreg\fP\fB, const char *restrict \fP\fIregaus\fP\fB,\fP \fB int \fP\fIkschalter\fP\fB);\fP \fBint regexec(const regex_t *restrict \fP\fIpreg\fP\fB, const char *restrict \fP\fIzeichenkette\fP\fB,\fP \fB size_t \fP\fIntreffer\fP\fB, regmatch_t \fP\fIptreffer\fP\fB[_Nullable restrict .\fP\fIntreffer\fP\fB],\fP \fB int \fP\fIaschalter\fP\fB);\fP .P \fBsize_t regerror(int \fP\fIfehlercode\fP\fB, const regex_t *_Nullable restrict \fP\fIpreg\fP\fB,\fP \fB char \fP\fIfehlerpuf\fP\fB[_Nullable restrict .\fP\fIfehlerpufgröße\fP\fB],\fP \fB size_t \fP\fIfehlerpufgröße\fP\fB);\fP \fBvoid regfree(regex_t *\fP\fIpreg\fP\fB);\fP .P \fBtypedef struct {\fP \fBsize_t re_nsub;\fP \fB} regex_t;\fP .P \fBtypedef struct {\fP \fBregoff_t rm_so;\fP \fBregoff_t rm_eo;\fP \fB} regmatch_t;\fP .P \fBtypedef\fP /* … */ \fBregoff_t;\fP .fi .SH BESCHREIBUNG .SS Kompilierung \fBregcomp\fP() wird zur Kompilierung eines regulären Ausdrucks in eine Form verwandt, die für nachfolgende \fBregexec\fP()\-Suchen geeignet ist. .P Im Erfolgsfall wird der Musterpuffer bei \fI*preg\fP initialisert. \fIregaus\fP ist eine auf Nullbyte endende Zeichenkette. Die Locale muss die gleiche wie bei der Ausführung von \fBregexec\fP() sein. .P Nachdem \fBregcomp\fP() erfolgreich war, hält \fIpreg\->re_nsub\fP die Anzahl der Unterausdrücke in \fIregaus\fP. Daher reicht es aus, ein Wert \fIpreg\->re_nsub\fP + 1 als \fIntreffer\fP an \fBregexec\fP() zu übergeben, um alle Treffer einzufangen. .P \fIkschalter\fP ist das bitweises ODER von null oder mehr der Folgenden: .TP \fBREG_EXTENDED\fP Die Syntax der erweiterten regulären Ausdrücke gemäß POSIX bei der Interpretation von \fIregaus\fP verwenden. Falls nicht gesetzt, werden die grundlegenden regulären Ausdrücke gemäß POSIX 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 Nur den Gesamterfolg berichten. \fBregexec\fP() wird nur \fIptreffer\fP für \fBREG_STARTEND\fP verwenden und \fIntreffer\fP ignorieren. .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 Vergleich \fBregexec\fP() wird zum Vergleich einer auf Nullbyte endenden Zeichenkette mit dem kompilierten Musterpuffer in \fI*preg\fP, der durch \fBregexec\fP() initialisiert sein muss. \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 Passt auf [\fIZeichenkette + ptreffer[0].rm_so\fP,\fI Zeichenkette + ptreffer[0].rm_eo\fP) anstelle von [\fIZeichenkette\fP,\fI Zeichenkette + strlen(Zeichenkette)\fP). Dies ermöglicht den Vergleich mit Nullbytes und vermeidet ein \fBstrlen\fP(3) bei Zeichenketten mit bekannter Länge. Falls Treffer zurückgeliefert wurden (\fBREG_NOSUB\fP wurde nicht an \fBregcomp\fP() übergeben, der Vergleich war erfolgreich und \fIntreffer\fP > 0) überschreiben sie wie gewöhnlich \fIptreffer\fP und der Vergleichsversatz bleibt relativ zu \fIzeichenkette\fP (nicht \fIzeichenkette + ptreffer[0].rm_so\fP). Dieser Schalter ist eine BSD\-Erweiterung und in POSIX nicht vorhanden. .SS Vergleichs\-Versätze Außer \fBREG_NOSUB\fP wurde an \fBregcomp\fP() übergeben, ist es möglich, den Ort des Treffers innerhalb von \fIzeichenkette\fP zu bestimmen: \fBregexec\fP() füllt \fIntreffer\fP Elemente von \fIptreffer\fP mit Ergebnissen: \fIptreffere[0]\fP entspricht dem gesamten Treffer, \fIptreffer[1]\fP dem ersten Unterausdruck usw. Falls es mehr Treffer als \fIntreffer\fP gab, werden diese verworfen; falls weniger, werden unbenutzte Elemente von \fIptreffer\fP mit \fB\-1\fPen gefüllt. .P Jeder zurückgelieferte gültige (nicht \fB\-1\fP) Treffer entspricht dem Bereich [\fIzeichenkette + rm_so\fP,\fI zeichenkette + rm_eo\fP). .P \fIregoff_t\fP ist ein vorzeichenbehafteter Ganzzahltyp, der den größten Wert speichern kann, der in entweder dem Typ \fIptrdiff_t\fP oder dem Typ \fIssize_t\fP gespeichert werden kann. .SS Fehlerberichterstattung Zur Umwandlung der von \fBregcomp\fP() und \fBregexec\fP() zurückgelieferten Fehlercodes in Fehlermeldungszeichenketten wird \fBregerror\fP() verwandt. .P Falls \fIpreg\fP kein NULL\-Zeiger ist, muss \fIfehlercode\fP der neuste Fehlercode sein, der von einer Aktion auf \fIpreg\fP zurückgeliefert wurde. .P Falls \fIfehlerpufgröße\fP nicht 0 ist, werden bis zu \fIfehlerpufgröße\fP an Bytes in \fIfehlerpuf\fP kopiert; die Fehlerzeichenkette endet immer auf einem Nullbyte und wird abgeschnitten, damit sie passt. .SS Freigabe \fBregfree\fP() deinitialisiert den Musterpuffer bei \fI*preg\fP und gibt sämtlichen zugeordneten Speicher frei. \fI*preg\fP muss mittels \fBregcomp\fP() initialisiert worden sein. .SH RÜCKGABEWERT \fBregcomp\fP() liefert Null bei einer erfolgreichen Kompilierung oder einen Fehlercode bei einem Fehlschlag zurück. .P \fBregexec\fP() liefert Null bei einem erfolgreichen Treffer oder \fBREG_NOMATCH\fP bei einem Fehlschlag zurück. .P \fBregerror\fP() liefert die Größe des Puffers zurück, der zum Halten der Zeichenkette benötigt wird. .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 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 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; lbx lb lb l l l. Schnittstelle Attribut Wert T{ .na .nh \fBregcomp\fP(), \fBregexec\fP() T} Multithread\-Fähigkeit MT\-Sicher locale T{ .na .nh \fBregerror\fP() T} Multithread\-Fähigkeit MT\-Sicher env T{ .na .nh \fBregfree\fP() T} Multithread\-Fähigkeit MT\-Sicher .TE .SH STANDARDS POSIX.1\-2008. .SH GESCHICHTE POSIX.1\-2001. .P Vor POSIX.1\-2008 musste \fIregoff_t\fP in der Lage sein, den größten Wert abzuspeichern, der in entweder dem Typ \fIoff_t\fP oder dem Typ \fIssize_t\fP gespeichert werden kann. .SH WARNUNGEN .\" glibc, musl, 4.4BSD, illumos \fIre_nsub\fP muss nur initialisiert sein, falls \fBREG_NOSUB\fP nicht festgelegt wurde, aber alle bekannten Implementierungen initialisieren sie trotzdem. .P .\" illumos has two more start/end pairs and the first one is of pointers Sowohl \fIregex_t\fP als auch \fIregmatch_t\fP dürfen (und haben) weitere Mitglieder, in beliebiger Reihenfolge. Referenzieren Sie sie immer über den Namen. .SH BEISPIELE .EX #include #include #include #include \& #define ARRAY_SIZE(arr) (sizeof((arr)) / sizeof((arr)[0])) \& static const char *const str = "1) John Driverhacker;\[rs]n2) John Doe;\[rs]n3) John Foo;\[rs]n"; 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 = \[rs]"%s\[rs]"\[rs]n", str); printf("Treffer:\[rs]n"); \& for (unsigned 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("#%zu:\[rs]n", i); printf("Versatz = %jd; Länge = %jd\[rs]n", (intmax_t) off, (intmax_t) len); printf("Teilzeichenkette = \[rs]"%.*s\[rs]"\[rs]n", len, s + pmatch[0].rm_so); \& s += pmatch[0].rm_eo; } \& exit(EXIT_SUCCESS); } .EE .SH "SIEHE AUCH" \fBgrep\fP(1), \fBregex\fP(7) .P Das Handbuch der Glibc, Abschnitt \fIRegular Expressions\fP .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 .