Beschreibung | Diese Funktionen interpretieren internationalisierte einfache reguläre Ausdrücke und erweiterte reguläre Ausdrücke, wie sie in „XBD Regular Expressions“ beschrieben sind. Die Struktur regex_t enthält mindestens folgendes Element: size_t re_nsub
| Anzahl der geklammerten Teilausdrücke. | Die Struktur regmatch_t enthält mindestens folgende Elemente: regoff_t rm_so
| Offset vom Beginn der Zeichenkette bis zum Anfang der Teilzeichenkette. | regoff_t rm_eo
| Offset vom Beginn der Zeichenkette bis zum ersten Zeichen nach dem Ende der Teilzeichenkette. | Die Funktion regcomp() übersetzt den regulären Ausdruck, der in der Zeichenkette enthalten ist, auf die das Argument pattern zeigt und speichert das Ergebnis in der Struktur auf die preg zeigt. Das Argument cflags ist ein bitweises inklusives ODER von keinem oder mehreren der folgenden Flags, die im Header regex.h definiert werden: REG_EXTENDED
| Benutze erweiterte reguläre Ausdrücke. | REG_ICASE
| Ignoriere Groß- Kleinschreibung beim Vergleich. | REG_NOSUB
| regexex() meldet nur Erfolg oder Misserfolg.
| REG_NEWLINE
| Verändert die Behandlung von Neuezeilezeichen, wie im Text beschrieben. | Standardmäßig wird der Parameter pattern als einfacher regulärer Ausdruck interpretiert. Mit dem Setzen des Flags REG_EXTENDED im Parameter cflags kann die Anwendung angeben, dass es sich um einen erweiterten regulären Ausdruck handelt. Bei Erfolg wird 0 zurückgegeben, sonst ein Wert ungleich 0. In diesem Fall ist der Inhalt von preg undefiniert. Wenn das Flag REG_NOSUB in cflags nicht gesetzt ist, gibt regcomp() in re_nsub die Anzahl der in pattern gefundenen geklammerten Teilausdrücke zurück, die in einfachen regulären Ausdrücken durch \( \) und in erweiterten regulären Ausdrücken durch ( ) begrenzt sind. Die Funktion regexec() vergleicht die durch string spezifizierte und mit Null abgeschlossene Zeichenkette mit dem übersetzten regulären Ausdruck preg, der durch einen vorangegangen Aufruf von regcomp() initialisiert wurde. Wenn eine Übereinstimmung gefunden wird, gibt regexec() 0 zurück. Sonst wird ein Wert verschieden von 0 zurückgegeben. Dies kann bedeuten, dass keine Übereinstimmung gefunden wurde, oder dass ein Fehler aufgetreten ist. Das Argument eflags ist ein bitweises inklusives ODER von keinem oder mehreren der folgenden Flags, die im Header regex.h definiert sind: REG_NOTBOL
| Das erste Zeichen der Zeichenkette, auf die string zeigt, ist nicht das erste Zeichen einer Zeile. Dadurch gibt es für ^ keine Übereinstimmung mit dem Zeilenanfang, wenn dieses als spezielles Zeichen verwendet wurde. | NEG_NOTEOL
| Das letzte Zeichen der Zeichenkette, auf die string zeigt, ist nicht das letzte Zeichen einer Zeile. Dadurch gibt es für $ keine Übereinstimmung mit dem Zeilenende, wenn dieses als spezielles Zeichen verwendet wurde. | Wenn in den Argumenten für regcomp() für nmatch 0 übergeben, oder in cflags das Flag REG_NOSUB gesetzt wurde, ignoriert regexec() das Argument pmatch. Sonst muss pmatch auf ein Array mit mindestens nmatch Elementen zeigen und regexec() füllt die Elemente des Arrays mit den Offsets der Teilzeichenketten von string, die mit den geklammerten Teilausdrücken von pattern übereinstimmen: pmatch[i].rm_so ist der Byteoffset des Anfangs und pmatch[i].rm_eo der um eins vergrößerte Byteoffset des Endes der i-ten Teilzeichenkette. (Der Teilausdruck i beginnt mit der i-ten öffnenden Klammer, wenn man mit 1 zu zählen beginnt.) Die Offsets in pmatch[0] identifizieren die Teilzeichenkette, die mit dem gesamten regulären Ausdruck übereinstimmt. Ungenutzte Elemente von pmatch werden mit -1 gefüllt. Gibt es mehr als nmatch Teilzeichenketten in pattern, wobei pattern selbst dazu zählt, prüft regexec() zwar die gesamte Übereinstimmung, dokumentiert aber nur die ersten nmatch Teilzeichenketten. Beim Vergleich eines einfachen oder erweiterten regulären Ausdrucks, kann jeder enthaltene geklammerte Teilausdruck von pattern mit mehreren verschiedenen Teilzeichenketten von string, oder aber auch keiner Teilzeichenkette übereinstimmen, obwohl der gesamte Ausdruck übereinstimmt. Die folgenden Regeln legen fest, welche der übereinstimmenden Teilzeichenketten gemeldet werden. Wenn der Teilausdruck i nicht in einem anderen Teilausdruck enthalten ist und Teil mehrerer Übereinstimmungen ist, dann begrenzt pmatch[i] die letzte Übereinstimmung. Wenn der Teilausdruck i nicht in einem anderen Teilausdruck enthalten ist und nicht Teil einer Übereinstimmung ist, werden die Offsets in match[i] auf -1 gesetzt. Ein Teilausdruck ist nicht Teil einer Übereinstimmung, wenn: * oder \{ \} direkt nach dem Teilausdruck in einem einfachen regulären Ausdruck, oder *, ?, oder { } direkt nach dem Teilausdruck in einem erweiterten regulären Ausdruck steht und der Teilausdruck nicht (0 mal) übereinstimmt oder | in einem erweiterten regulären Ausdruck verwendet wird um diesen oder einen anderen Teilausdruck auszuwählen und der andere Teilausdruck übereinstimmt.
Wenn der Teilausdruck i im Teilausdruck j, aber in keinem weiteren Teilausdruck innerhalb von j enthalten ist und in pmatch[j] eine Übereinstimmung gemeldet wird, dann wird eine oder keine Übereinstimmung von i in pmatch[i] auf die unter Punkt 1. und 2. beschriebene Weise gemeldet, aber bezogen auf die in pmatch[j] gemeldete Teilzeichenkette statt auf die ganze Zeichenkette. Wenn der Teilausdruck i im Teilausdruck j enthalten ist und die Offsets in pmatch[j] auf -1 gesetzt sind, so sind die Zeiger in pmatch[i] ebenfalls auf -1 gesetzt. Wenn der Teilausdruck i mit eine Zeichenkette der Länge 0 übereinstimmt, dann sind beide Offsets von pmatch[i] der Offset des Zeichens oder der terminierenden Null, das bzw. die unmittelbar der Zeichenkette der Länge 0 folgt.
Wenn die Lokalität, die eingestellt ist, wenn regexec() gerufen wird, nicht mit der übereinstimmt, die eingestellt war, als der reguläre Ausdruck übersetzt wurde, ist das Ergebnis undefiniert. Wenn REG_NEWLINE in cflags nicht gesetzt ist, wird ein Zeilenumbruch immer wie ein normales Zeichen behandelt. Wenn REG_NEWLINE gesetzt ist, wird ein Zeilenumbruch mit folgenden Ausnahmen wie ein normales Zeichen behandelt: Ein Zeilenumbruch in string stimmt mit keinem Punkt (.) außerhalb eines geklammerten Ausdrucks, oder irgendeiner Form einer ausschließenden Liste überein. (siehe „XBD specification, Chapter 7, Regular Expressions“). Dient ein Zirkumflex (^) in pattern zur Verankerung des regulären Ausdrucks, stimmt es mit der Zeichenkette der Länge 0 unmittelbar hinter einem Zeilenumbruch in string überein, ungeachtet ob REG_NOBOL gesetzt ist oder nicht. Dient das Dollar-Zeichen ($) in pattern zur Verankerung des regulären Ausdrucks, stimmt es mit der Zeichenkette der Länge 0 unmittelbar vor einem Zeilenumbruch in string überein, ungeachtet ob REG_NOTEOL gesetzt ist oder nicht.
Die Funktion regfree() gibt den gesamten von regcomp() angeforderten und mit preg verbundenen Speicherplatz wieder frei. Folgende Konstanten sind als Fehler-Returnwerte definiert: REG_NOMATCH
| regexec() hat keine Übereinstimmung gefunden.
| REG_BADPAT
| Ungültiger regulärer Ausdruck. | REG_ECOLLATE
| Ungültige Äquivalenzklasse referenziert. | REG_ECTYPE
| Ungültige char-Klasse referenziert. | REG_EESCAPE
| Abschließender \ in pattern. |
REG_ESUBREG
| Ungültige oder falsche Zahl in \digit. | REG_EBRACK
| Unterschiedliche Anzahl von [ und ]. | REG_ENOSYS
| Die Funktion wird nicht unterstützt. | REG_EEPAREN
| Unterschiedliche Anzahl von \( und \) bzw. ( und ). | REG_EBRACE
| Unterschiedliche Anzahl von \/ und \}. | REG_BADBR
| Ungültiger Inhalt von \{ \}: keine Zahl, zu große Zahl, mehr als zwei Zahlen, die erste Zahl ist größer als die zweite. | REG_ERANGE
| Ungültiger Endpunkt in Bereichsausdruck. | REG_ESPACE
| Außerhalb des Speicherbereichs. | REG_BADRPT
| Vor ?, * oder + steht kein regulärer Ausdruck. | Extension |
| REG_ENOSYS
| Die Funktion wird nicht unterstützt. | REG_INVARG
| Ein Argument ist ungültig. | REG_EPATTERN
| Leeres/Null Pattern übergeben (End) | Die Funktion regerror() bietet eine Abbildung der Fehlerrückgabewerte von regcomp() und regexec() auf einen abdruckbaren Text. Die generierte Zeichenfolge korrespondiert mit dem Wert des zuletzt zurückgegebenen Fehlerwertes eines Aufrufs von regcomp() oder regexec() mit dem Wert von preg. Ist errcode kein solcher Wert, ist der Inhalt der generierten Zeichenkette undefiniert. Ist preg der NULL-Zeiger, aber errcode ein von einem vorangegangen Aufruf von regexec() oder regcomp() stammender Fehlercode, generiert regerror() ebenfalls einen zu diesem Fehlercode korrespondierenden Text. Dieser ist aber möglichweise nicht so detailliert. Ist der Wert der Arguments errbuf_size verschieden von 0, speichert die Funktion regerror() die generierte Zeichenkette in den Puffer der Länge errbuf_size auf den das Argument errbuf zeigt. Passt die Zeichenkette inklusive der abschließenden NULL nicht in den Puffer, kürzt regerror() die Zeichenkette und schließt sie mit einer NULL ab. Hat errbuf_size den Wert 0, ignoriert regerror() das Argument errbuf und gibt die Länge des Puffers mit, der benötigt würde um die generierte Zeichenkette aufzunehmen. Enthält das an regexec() oder regfree() übergebene Argument preg nicht einen von regcomp() übersetzten regulären Ausdruck, ist das Ergebnis undefiniert. Nachdem preg an regfree() übergeben wurde, wird es nicht mehr als übersetzter regulärer Ausdruck behandelt. |